前端开发es6入门基础

ES6基础入门教程(八)map数据结构

2019-10-30  本文已影响0人  党云龙

回忆一下


在es5中常用的数据结构是array和json obj,在es6中,出现了两种新的数据类型set和map,其实还有一种weakset,但是用处不大,就不多解释了。

set是类似于数组的一种数据解构,但是它里面的值不能有重复的,也不能通过下标访问;
我感觉这个东西只有一个作用,就是给数组排重。
(其实除了set以外 还有另一个weakset是用来专门存对象的,但是他不能遍历十分致命,所以现在都是用map。)

请看例子


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数组没有下标

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

重点:map结构,类似于json obj也是名值对,不过他里面的内容是不能重复的,他的名可以是任何东西。

map比较json obj最大优势在于,第一,key可以是任意类型,第二,通过key方法或者values一次拿到所有键值和键名,第三,直接能通过forEach遍历,而不用再通过for。第四,直接通过[...maparr]转化为数组。它本身是一种更像hash结构的数据结构。

缺点:map本身不是线性的,他不能通过下标访问。虽然他遍历起来很方便。。

在es5中也可以使用Object.keys来获取所有的key,但是方法十分的匮乏,es6直接提供 keys()/values()/entries()/forEach()方法,非常强大。

//map的key 可以是Nan,布尔值,字符串,对象和各种东西,在json中key只能是字符串
//他不能通过下标访问,因为他本身也不是线性的
let map = new Map([
    ["name",[1,2,3]],
    [true,123],
]);
map.set(true,889) //他的Key是不能重复的 你再次设置会覆盖里面第一个true的值
console.log(map);
查看map中的值

从这个例子中能看到,虽然我后面重新set了一个值,但是并不会在里面新增一个,而是对原来的内容进行赋值。

关键问题:深入map数据结构


// map和set数据结构常用的方法有 set或add添加 / has 查找 / clear 清空
// 在map中通过get(key)来获得值

// 只有key是不能重复的 val怎么重复都无所谓
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);
}

解构和排序 从map中获取来的已经是数组了,直接通过sort排序即可,简直爽炸天。

// 排序,一般情况下不需要对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
})
//查看排序后的数组
console.log(map.get("people"));
// 数据解构 结构数据name,age 要跟对象中的一致
for(let {name,age} of map.get("people")){
    console.log(age);
}
上一篇下一篇

猜你喜欢

热点阅读