ES6基礎(chǔ)入門(mén)教程(八)map數(shù)據(jù)結(jié)構(gòu)

回憶一下


在es5中常用的數(shù)據(jù)結(jié)構(gòu)是array和json obj,在es6中,出現(xiàn)了兩種新的數(shù)據(jù)類(lèi)型set和map,其實(shí)還有一種weakset,但是用處不大,就不多解釋了。

set是類(lèi)似于數(shù)組的一種數(shù)據(jù)解構(gòu),但是它里面的值不能有重復(fù)的,也不能通過(guò)下標(biāo)訪問(wèn);
我感覺(jué)這個(gè)東西只有一個(gè)作用,就是給數(shù)組排重。
(其實(shí)除了set以外 還有另一個(gè)weakset是用來(lái)專(zhuān)門(mén)存對(duì)象的,但是他不能遍歷十分致命,所以現(xiàn)在都是用map。)

請(qǐng)看例子


let set = new Set([1, 2, 3, 4, 4]);

let arr=["a","b","c","d","a"]
let setarr=new Set();

arr.forEach(x=>setarr.add(x))

console.log(setarr[0]); //undefined set數(shù)組沒(méi)有下標(biāo)

for(let i of setarr){
    console.log(i);
}

重點(diǎn):map結(jié)構(gòu),類(lèi)似于json obj也是名值對(duì),不過(guò)他里面的內(nèi)容是不能重復(fù)的,他的名可以是任何東西。

map比較json obj最大優(yōu)勢(shì)在于,第一,key可以是任意類(lèi)型,第二,通過(guò)key方法或者values一次拿到所有鍵值和鍵名,第三,直接能通過(guò)forEach遍歷,而不用再通過(guò)for。第四,直接通過(guò)[...maparr]轉(zhuǎn)化為數(shù)組。它本身是一種更像hash結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu)。

缺點(diǎn):map本身不是線性的,他不能通過(guò)下標(biāo)訪問(wèn)。雖然他遍歷起來(lái)很方便。。

在es5中也可以使用Object.keys來(lái)獲取所有的key,但是方法十分的匱乏,es6直接提供 keys()/values()/entries()/forEach()方法,非常強(qiáng)大。

//map的key 可以是Nan,布爾值,字符串,對(duì)象和各種東西,在json中key只能是字符串
//他不能通過(guò)下標(biāo)訪問(wèn),因?yàn)樗旧硪膊皇蔷€性的
let map = new Map([
    ["name",[1,2,3]],
    [true,123],
]);
map.set(true,889) //他的Key是不能重復(fù)的 你再次設(shè)置會(huì)覆蓋里面第一個(gè)true的值
console.log(map);
查看map中的值

從這個(gè)例子中能看到,雖然我后面重新set了一個(gè)值,但是并不會(huì)在里面新增一個(gè),而是對(duì)原來(lái)的內(nèi)容進(jìn)行賦值。

關(guān)鍵問(wèn)題:深入map數(shù)據(jù)結(jié)構(gòu)


// map和set數(shù)據(jù)結(jié)構(gòu)常用的方法有 set或add添加 / has 查找 / clear 清空
// 在map中通過(guò)get(key)來(lái)獲得值

// 只有key是不能重復(fù)的 val怎么重復(fù)都無(wú)所謂
let map = new Map([
    ["man",[["name","laodang"],["name","laozhang"]]],
    ["reg",25]
]);
// let[key,val] of map 都可以獲取到值
for(let[key,val] of map.get("man")){
    console.log(key);
    console.log(val);
}

解構(gòu)和排序 從map中獲取來(lái)的已經(jīng)是數(shù)組了,直接通過(guò)sort排序即可,簡(jiǎn)直爽炸天。

// 排序,一般情況下不需要對(duì)key排序
let map = new Map([
    ["people",
        [{"name":"laodang","age":"30"},
        {"name":"laowang","age":"28"},
        {"name":"laohe","age":"25"}]
    ],
]);
console.log(map.get("people"));
//排序
map.get("people").sort((a,b)=>{
    return a.age-b.age
})
//查看排序后的數(shù)組
console.log(map.get("people"));
// 數(shù)據(jù)解構(gòu) 結(jié)構(gòu)數(shù)據(jù)name,age 要跟對(duì)象中的一致
for(let {name,age} of map.get("people")){
    console.log(age);
}
?著作權(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)容