ES6的Set、Map數(shù)據(jù)結(jié)構(gòu) 數(shù)組

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)
  1. 適用
    可以用在儲(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è)方法:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容