ES6的Set、Map資料結構 陣列

weixin_34138377發表於2016-12-20

Set 陣列


filter過濾陣列的數值
var ss = [1,2,3,4,5,6,7,8]
ss.filter(function(ele){
    if(ele>5){
        return true
    }
    return false
});
console.log(ss) //[6,7,8]
並集

合併兩個陣列,去掉重複的

let a = new Set([1,2,3,4])
let b = new Set({4,5,6})
let union = new Set([...a,...b])
console.log([...union]) //1 2 3 4 5 6 去掉重複的4
交集

利用filter()和has()來進行資料交集

let a = new Set([1,2,3,4])
let b = new Set({4,5,6})
let intersect = [...a].filter(function(ele){
   return b.has(elem)
})
// es6 簡寫方式
//  let intersect = [...a].filter(
//        x => x.has(x)
//  })

差集

let a = new Set([1,2,3,4])
let b = new Set({4,5,6})
let difference= [...a].filter(function(ele){
   return !b.has(elem)
})
//1,2,3

WeakSet 針對物件

1.建構函式
WeakSet與Set結構類似,也是不重複的值的集合。但是它與Set有兩個區別。
首先,WeakSet的成員只能是物件,而不能是其它型別的值。
其次,WeakSet中的物件都是弱引用,即垃圾回收機制不考慮WeakSet對該物件的引用。也就是說,如果其它物件不在引用該物件,那麼垃圾回收機制會自動回收該物件所佔用的記憶體,不考慮該物件還存在於WeakSet中。這個特點意味著無法引用WeakSet的成員,因此WeakSet是不可遍歷的。

報錯
var ws = new WeakSet();
ws.add(1); 
// Uncaught TypeError: Invalid value used in weak set

2.屬性和方法

  • add(value)
  • delete()
  • has()
var weakset = new WeakSet()
let aObj = {a:'aa'}
weakset .add(aObj)
  1. 適用
    可以用在儲存DOM節點,當DOM節點新增和刪除後不會導致記憶體洩漏。

weakset 不能取值,不能顯示 只用來表示是否有重複的物件

Map 物件


var mapData = new Map();
var obj1 = {};
var obj2 = {};
mapData.set(obj1,'111') //新增元素
mapData.set(obj2,'333')//新增元素
console.log( mapData.get(obj1) ) // 獲取
console.log( mapData.has(obj1) ) //判斷
console.log( mapData.delete(obj1) ) 刪除
mapData.clear() //清空

1.目的Map結構與物件類似,與傳統的物件對比而言,傳統僅能使用字串當做鍵, Map結構則可以使用變數當做鍵。這種對應關係可以稱之為“值--值”對應,是物件的完善版。
2.建構函式構造
函式接受一個二維陣列當做引數。

var m = new Map([['name','zhangsan'],['sex','male']]);
console.log(m);// Map {"name" => "zhangsan", "sex" => "male"}

如果對同一個鍵多次賦值,後面的值將覆蓋前一次的值。
只有對同一物件的引用,Map結構才將其視為同一個鍵。

3.屬性和方法

  • size
  • set(key,value)
  • get(key)
  • has(key)
  • delete(key)
  • clear()
    4.遍歷方法
  • keys()
  • values()
  • entries()
  • forEach()

5.Map轉換為陣列結構

var m = new Map([['0','zhangsan'],['1','lisi']]);
console.log([...m.keys()]);// ["0", "1"]

WeakMap

與Map類似,唯一區別在於它只接受物件作為鍵名,而且不計入垃圾回收機制。
四個方法:

相關文章