Set 數(shù)組
filter過(guò)濾數(shù)組的數(shù)值
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]
并集
合并兩個(gè)數(shù)組,去掉重復(fù)的
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 去掉重復(fù)的4
交集
利用filter()和has()來(lái)進(jìn)行數(shù)據(jù)交集
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 簡(jiǎn)寫方式
// 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 針對(duì)對(duì)象
1.構(gòu)造函數(shù)
WeakSet與Set結(jié)構(gòu)類似,也是不重復(fù)的值的集合。但是它與Set有兩個(gè)區(qū)別。
首先,WeakSet的成員只能是對(duì)象,而不能是其它類型的值。
其次,WeakSet中的對(duì)象都是弱引用,即垃圾回收機(jī)制不考慮WeakSet對(duì)該對(duì)象的引用。也就是說(shuō),如果其它對(duì)象不在引用該對(duì)象,那么垃圾回收機(jī)制會(huì)自動(dòng)回收該對(duì)象所占用的內(nèi)存,不考慮該對(duì)象還存在于WeakSet中。這個(gè)特點(diǎn)意味著無(wú)法引用WeakSet的成員,因此WeakSet是不可遍歷的。
報(bào)錯(cuò)
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)
- 適用
可以用在儲(chǔ)存DOM節(jié)點(diǎn),當(dāng)DOM節(jié)點(diǎn)添加和刪除后不會(huì)導(dǎo)致內(nèi)存泄漏。
weakset 不能取值,不能顯示 只用來(lái)表示是否有重復(fù)的對(duì)象
Map 對(duì)象
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結(jié)構(gòu)與對(duì)象類似,與傳統(tǒng)的對(duì)象對(duì)比而言,傳統(tǒng)僅能使用字符串當(dāng)做鍵, Map結(jié)構(gòu)則可以使用變量當(dāng)做鍵。這種對(duì)應(yīng)關(guān)系可以稱之為“值--值”對(duì)應(yīng),是對(duì)象的完善版。
2.構(gòu)造函數(shù)構(gòu)造
函數(shù)接受一個(gè)二維數(shù)組當(dāng)做參數(shù)。
var m = new Map([['name','zhangsan'],['sex','male']]);
console.log(m);// Map {"name" => "zhangsan", "sex" => "male"}
如果對(duì)同一個(gè)鍵多次賦值,后面的值將覆蓋前一次的值。
只有對(duì)同一對(duì)象的引用,Map結(jié)構(gòu)才將其視為同一個(gè)鍵。
3.屬性和方法
- size
- set(key,value)
- get(key)
- has(key)
- delete(key)
- clear()
4.遍歷方法 - keys()
- values()
- entries()
- forEach()
5.Map轉(zhuǎn)換為數(shù)組結(jié)構(gòu)
var m = new Map([['0','zhangsan'],['1','lisi']]);
console.log([...m.keys()]);// ["0", "1"]
WeakMap
與Map類似,唯一區(qū)別在于它只接受對(duì)象作為鍵名,而且不計(jì)入垃圾回收機(jī)制。
四個(gè)方法: