javascript 集合串接小筆記
來自 http://www.codewars.com/ 的每日小問題
問題:
list([ {name: 'Bart'}, {name: 'Lisa'}, {name: 'Maggie'} ]) // returns 'Bart, Lisa & Maggie'
list([ {name: 'Bart'}, {name: 'Lisa'} ]) // returns 'Bart & Lisa'
list([ {name: 'Bart'} ]) // returns 'Bart' list([]) // returns ''
對javascript函數不熟悉的胖喵解法:
var arrayValue = '';
//檢查參數是否陣列
if (names instanceof [].constructor) {
//利用forEach反射
names.forEach((value,index) => {
//若陣列參數為最後一個 && 陣列元素>1
if (names.length==index+1 && names.length >1) {
arrayValue += " & " + value.name;
} else {
arrayValue += ", " + value.name;
}
});
//將開頭 , 取代 ""
arrayValue = arrayValue.replace(/^,/, "").trim();
console.log(arrayValue);
}
return arrayValue;
以上拉哩拉扎得一大堆...只為了處理一點小問題 囧
所以每次成功後看到其他高手的寫法 ..實在是讓胖喵汗顏阿..
var list = names.map((value, index) =>value.name).join(", ").replace(/(.*),(.*)$/, "$1 &$2");
=^= 沒錯 就一行...真的是覺得境界差太多了,不過在此也是要解說一下..
1.map:映射 value.name 集合
2.join:將所有集合元素利用 , 串接成字串
3.replace:(.*),(.*)$ => 代表結尾串接的規則 利用 $1 &$2取代 (註:$2前方&為什麼不需要空白是因為原本,規則為 $1, $2
分享到這裡喔..謝謝觀賞