使用展開語法合併陣列
下方有兩個陣列資料:
1 | let groupA = ["1", "2", "3"]; |
將兩個陣列資料合併的傳統寫法如下:
1 | let groupAll = groupA.concat(groupB); |
但比較不易閱讀且不夠直觀,ES6 後來發明了下方寫法:
1 | let groupAll = [...groupA, ...groupB]; |
... ary
就是展開陣列資料,且這樣的寫法就可以得知在陣列裡有兩筆陣列,且閱讀上也直觀。
淺複製觀念
下方有兩個陣列,因 groupB = groupA
,所以兩個內容的值會相同,且陣列跟物件都是傳參考,不是傳值,所以如果在 groupB
新增一個值,groupA
裡面也會新增一個值,故在此特性下會新增相同的值在其中。
1 | let groupA = ["1", "2", "3"]; |
但如果要使 groupA
不受影響的話可以這樣寫。
1 | let groupA = ["1", "2", "3"]; |
按照上方展開陣列資料的特性,展開陣列後是取出 groupA
資料再回傳到新陣列 […groupA] 內,所以就不會被 groupB
影響。
類陣列觀念
類陣列就是很像陣列格式,但其實不是陣列,其 proto 的方法也很少。一般在 function 中會傳入參數值做運算,得到預期的值。
因第二個 update 資料較多,透過 console.log
檢查會顯示一個陣列資料。
1 | var origin = 1000; |
另一個觀念:
1 | var origin = 1000; |
reduce 是陣列中的方法,在類陣列中是無法使用的,所以要透過展開將原本的 arguments 轉成一個新陣列,就會得到預期的結果。
其餘參數
一般時候,若在 function 內設定好參數,輸入參數會自動對應其位置,如下:
1 | function more(a, b, c) { |
但有時候傳入的參數不確定有多少數量時,可以展開用其餘參數的方式抓取,變成陣列資料。
1 | function more(...more) { |
倘若前面加入一個變數,會顯示變數內容,後面的參數會用其餘參數的方式顯示。
1 | function more(name, ...more) { |