紀錄 ArrayUnique 從早期indexOf
的方式到現今各種優化的寫法。
前言
下列的各種範例,統一使用的 Array資料,如下
1 | let source = ["Kanboo", "Jack", "Rabbit", "Lucas", "Jack", "Lucas", "Rabbit"]; |
forloop + indexOf
早期使用的 for迴圈
+ indexOf
判斷是否已存在的值。
1 | let source = ["Kanboo", "Jack", "Rabbit", "Lucas", "Jack", "Lucas", "Rabbit"]; |
includes
在ES6提供了一個新方法:Array.prototype.includes()
,判斷陣列中是否已有相同的值?
- 有相同的值,回傳
true
- 無相同的值,回傳
false
1 | let source = ["Kanboo", "Jack", "Rabbit", "Lucas", "Jack", "Lucas", "Rabbit"]; |
forEach
將原本使用的 for迴圈
,改使用 forEach
執行,省略掉定義 i
、source.length
…等動作。
1 | let source = ["Kanboo", "Jack", "Rabbit", "Lucas", "Jack", "Lucas", "Rabbit"]; |
reduce()
遍歷每個元素,依序組合、加總,然後丟給下個元素,最終會回傳一個結果
1 | let source = ["Kanboo", "Jack", "Rabbit", "Lucas", "Jack", "Lucas", "Rabbit"]; |
Set() + Array.from()
Set
對象允許你存儲任何類型的唯一值,無論是原始值或者是對象引用。
Array.from()
會從類陣列(array-like)或是可迭代的物件建立一個新的陣列。
根據上述二種方法的特性,快速達成產生一個 已去除重覆值的新陣列
1 | let source = ["Kanboo", "Jack", "Rabbit", "Lucas", "Jack", "Lucas", "Rabbit"]; |
Set() + Spread
...
為 ES6的展開運算子(spread operator),把一個陣列展開(expand)成個別數值
1 | let source = ["Kanboo", "Jack", "Rabbit", "Lucas", "Jack", "Lucas", "Rabbit"]; |
補充說明
...
只是將 陣列
、set
的值拆解一個一個的值,並無額外產生新陣列。
1 | let number = [1,2,3,4,5]; |