Set是一個可存儲基礎範例及援用範例的容器,且容器中數據唯一。
(唯一:除NaN==NaN外,其他運用===推斷)
經常使用屬性與要領:
Set.prototype.size -- 返回Set實例的個數
Set.prototype.add() --增加元素
Set.prototype.delete() --刪除元素
Set.prototype.has() --推斷是不是存在某元素
Set.prototype.clear() --清空容器
Set.prototype.forEach() --遍歷容器
Set.prototype.keys() --返回容器鍵名遍歷器
Set.prototype.values() --返回容器鍵值遍歷器器
Set.prototype.entries() --返回容器鍵值對的遍歷器
基礎用法:
//建立容器
let s = new Set();
//增加基礎範例元素 --元素compare不存在隱式轉換 運用===,牢記
s.add(1);
s.add("1");
//增加特別範例元素 --慣例 NaN與NaN 比較效果返回true
s.add(NaN);
s.add(NaN);
//增加援用範例元素 -- 直接增加援用地點差別,所以屬於兩個元素
s.add({a:1});
s.add({a:1});
//增加對象的情勢,則只會增加一個元素進去
let obj = {a:2};
s.add(obj);
s.add(obj);
console.log([...s]); //增加遞次與數組push一樣
/* [1, "1", {…}, {…}, NaN, {…}]
0: 1
1: "1"
2: {a: 1}
3: {a: 1}
4: NaN
5: {a: 2}
length: 6
*/
//推斷元素是不是存在容器中 存在返回true,不存在返回false
s.has(obj)
//true
s.has({a:1})
//false
s.has("1")
//true
//刪除元素 -- 刪除勝利返回true,失利返回false
s.delete({a:1});
//false
s.delete(obj)
//true
console.log([...s]);
/* [1, "1", {…}, {…}, NaN]
0:1
1:"1"
2:{a: 1}
3:{a: 1}
4:NaN
length:5
*/
//size屬性存儲容器元素個數
console.log(s.size)
//5
//清空容器
s.clear();
s.size;
//0
遍歷:
keys() -- 返回鍵名的遍歷器
values() -- 返回鍵值的遍歷器
entries() -- 返回鍵值對的遍歷器
注重: Set的遍歷遞次即為增加遞次,且Set沒有鍵名,故Set的鍵名與鍵值為統一值
let s = new Set(['a',11,{a:1},NaN]);
s.keys();
//SetIterator {"a", 11, {…}, NaN}
[...s.keys()] //--轉化為數組情勢
//["a", 11, {…}, NaN]
//遍歷容器的鍵名
for(let item of s.keys()){
console.log(item);
}
/*
a
11
{a: 1}
NaN
*/
//----values()與entries()用法同上
----------------------------------------------------------
/*
forEach() -- 運用回調函數遍歷每一個元素
第一個參數為遍歷函數 函數參數依次為:鍵值、鍵名、鳩合自身,且參數可選
第二個參數可傳入內部this對象(可選參數)
*/
//僅僅運用遍歷的用法 -- 經常使用
s.forEach((v,k,obj)=>{
console.log(k+":"+v);
console.log(obj);
});
/*
a:a
Set(4) {"a", 11, {…}, NaN}
11:11
Set(4) {"a", 11, {…}, NaN}
[object Object]:[object Object]
Set(4) {"a", 11, {…}, NaN}
NaN:NaN
Set(4) {"a", 11, {…}, NaN}
*/
//第二個參數用法
let op = {
minus:function(x){
return x*x;
}
};
let ss = [1,2,3,4,5,6];
ss.forEach((v)=>console.log(op.minus(v)),op);
/*
1
4
9
16
25
36
*/
Set的運用場景:
//數組去重:
let arr = [1,23,4,4,56,5,56];
arr = [...new Set(arr)];
//[1, 23, 4, 56, 5]
//數組的並集、交集與差集
let a = [1,3,5,7,10];
let b = [1,2,4,6,8,10];
//並集
[...new Set([...a,...b])];
//[1, 3, 5, 7, 10, 2, 4, 6, 8]
//交集
let sss = new Set(b);
a.filter(i=>sss.has(i))
//[1, 10]
//差集
a.filter(i=>!sss.has(i));
//[3, 5, 7]
第一次寫文章,若有bug,請斧正Thanks♪(・ω・)ノ