SetES6 中提供的新數據結構,它類似於數組,但是成員的值都是唯一的,沒有重複的值。Set本身是一個構造函數,用來生成 Set 數據結構。
const set = new Set();
set.add(1);
set.add(2);
set.add(2);
console.log(set.size); // 2
console.log([...set]); // [1, 2]
上面的代碼可以看到,因爲Set是沒有重複值的,所以當添加兩個2的時候只加進去一個2。這裏size是Set實例的一個屬性,返回Set實例的成員總數。
另外,Set還可以接受一個數組作爲參數,用來初始化。
const setAarrray = new Set([1, 2, 2, "2", 3, 3, 4, 5, NaN, NaN, {}, {}]);
console.log([...setAarrray]); //[1, 2, "2" 3, 4, 5, NaN, {}, {}];
這個時候2和"2"都加進去了,是因爲在Set內部判斷兩個值是否相等用的是全等"==="。有一點要注意的是,向 Set 加入值時認爲NaN
等於自身,而精確相等運算符認爲NaN
不等於自身。所以上面代碼中,添加兩個NaN時,加進去一個。上面添加兩個空對象時都加進去了,說明兩個空對象是不相等的。在Set內部認爲,兩個對象總是不等的。
Set實例有自己的方法,下面介紹一下它的方法:
Set.prototype.add(value)
:添加某個值,返回 Set 結構本身。Set.prototype.delete(value)
:刪除某個值,返回一個布爾值,表示刪除是否成功。Set.prototype.has(value)
:返回一個布爾值,表示該值是否爲Set
的成員。Set.prototype.clear()
:清除所有成員,沒有返回值。
const set = new Set();
set.add(1);
set.add(2);
console.log(set.size); //2
console.log(set.has(1)); //true
console.log(set.has(2)); //true
console.log(set.has('2')); //false
set.delete(2);
console.log(set.size); //1
console.log(set.has(2)); //false
Set 結構的實例還有遍歷操作,可以用於遍歷成員。下面是遍歷的四種方法
Set.prototype.keys()
:返回鍵名的遍歷器Set.prototype.values()
:返回鍵值的遍歷器Set.prototype.entries()
:返回鍵值對的遍歷器Set.prototype.forEach()
:使用回調函數遍歷每個成員
keys
方法、values
方法、entries
方法返回的都是遍歷器對象。由於 Set 結構沒有鍵名,只有鍵值(或者說鍵名和鍵值是同一個值),所以keys
方法和values
方法的行爲完全一致。下面代碼中entries
方法返回的遍歷器,同時包括鍵名和鍵值,所以每次輸出一個數組,它的兩個成員完全相等。
const set = new Set(["a", "b", "c"]);
for (let item of set.keys()) {
console.log(item);
// "a"
// "b"
// "c"
}
for (let item of set.values()) {
console.log(item);
// "a"
// "b"
// "c"
}
for (let item of set.entries()) {
console.log(item);
// ["a", "a"]
// ["b", "b"]
// ["c", "c"]
}
還可以省略values
方法,直接用for...of
循環遍歷 Set。
const set = new Set(["a", "b", "c"]);
for (let item of set) {
console.log(item);
// "a"
// "b"
// "c"
}
Set 結構的實例與數組一樣,也擁有forEach
方法,用於對每個成員執行某種操作,沒有返回值。
const set = new Set(["a", "b", "c"]);
set.forEach((value, key) => {
console.log(value + ":" + key);
// a:a
// b:b
// c:c
});
Set可以進行數組和字符串的去重
const array = [1, 2, 3, 4, 4, 3, 2, 3];
const resultArray = [...new Set(array)];
console.log(resultArray); // [1, 2, 3, 4]
const str = 'abbbcc';
const resultStr = [...new Set(str)].join('');
console.log(resultStr); // "abc"
大概就是這些,如果想知道得更詳細可以去查看ES6。地址 http://es6.ruanyifeng.com/#docs/set-map