ES6成員Set的用法

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()    --返回容器鍵值對的遍歷器

基本用法:this

//建立容器
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

遍歷:prototype

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的使用場景:code

//數組去重:
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♪(・ω・)ノ對象

相關文章
相關標籤/搜索