ES6 提供了新的數據結構 Set。它類似於數組,但是成員的值都是唯一的,沒有重復的值。
Set 本身是一個構造函數,用來生成 Set 數據結構。
const s = new Set(); [2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x)); for (let i of s) { console.log(i); } // 2 3 5 4
上面代碼通過add
方法向 Set 結構加入成員,結果表明 Set 結構不會添加重復的值。
Set 函數可以接受一個數組(或者具有 iterable 接口的其他數據結構)作為參數,用來初始化。
// 例一 const set = new Set([1, 2, 3, 4, 4]); [...set] // [1, 2, 3, 4] // 例二 const items = new Set([1, 2, 3, 4, 5, 5, 5, 5]); items.size // 5 // 例三 function divs () { return [...document.querySelectorAll('div')]; } const set = new Set(divs()); set.size // 56 // 類似於 divs().forEach(div => set.add(div)); set.size // 56
上面代碼中,例一和例二都是Set
函數接受數組作為參數,例三是接受類似數組的對象作為參數。
上面代碼中,也展示了一種去除數組重復成員的方法。
// 去除數組的重復成員 [...new Set(array)]
Array.from
方法可以將 Set 結構轉為數組。
const items = new Set([1, 2, 3, 4, 5]); const array = Array.from(items);
這就提供了去除數組重復成員的另一種方法。
function dedupe(array) { return Array.from(new Set(array)); } dedupe([1, 1, 2, 3]) // [1, 2, 3]