javascript join replace 操作

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

分享到這裡喔..謝謝觀賞