数组和对象本身很重
es6专门新增了两个数据结构,专门用来存储数据,结构很轻,处理数据速度很快。
set map仅仅用于前端本地数据存储。
set
类似数组,可以看做是数组的子集,成员不能重复。
set结构的内容唯一性可以用来判断NaN
set结构简单,遍历速度非常快。
const s = new Set();
const arr = [1,2,2,3,3]
const arr2 = [...new Set(arr)];
set结构的属性:
.size 可以返回set结构的长度。
set结构的方法:
add(value) 新增
delete(value) 移除
has(value) 判断是否包含
clear() 清空数据。
set结构的遍历器:
keys()
values()
entries()
forEach()
用for of 循环可以用来做遍历器接口的遍历:
for (let item of set) {
console.log(item)
}
直接遍历set,默认是遍历其set.keys()这个接口。对于set结构,其key和value是相同的,所以,keys和values也是相同的。
for (let item of set.keys()) {
console.log(item)
}
for (let item of set.values()) {
console.log(item)
}
entries接口提供复合结构:
for (let item of set.entries()) {
console.log(item)//[key,value]
}
s.forEach(function (key, value, set) {
console.log(a, b, c);//1,1,set
})
forEach回调函数的参数:因为set结构没有key,所以,访问key实际上返回的是value。
set结构可以用来做数组去重复:
let arr = [1,2,3,4,5,3,4,5];
let arr2 = [...new Set(arr)];
map
类似对象,可以看做是对象的子集
map结构的属性:
size 返回map结构的长度。
map结构的方法:
set(key,value)
get(key)
has(key)
delete(key)
clear()
map结构的遍历器方法:
keys()
values()
entries()
forEach()
const 张三 = {name: '张三'};
const 李四 = {name: '李四'};
const obj = {
张三 :1 //这个张三和const 张三不是一个东西,这个张三相当于'张三'
}
const m = new Map();
m.set('a',1);
m.set(张三:2);
console.log(m.get(张三));
const 张三 = new Map();
张三.set = ('姓名':'张三')
张三.set = ('年龄':'18')
const 学生信息 = new Map();
学生信息.set(张三,{chengji:60,xuehao:12313});
console.log(学生信息)
const arr = new Map([
['a',1],
['b',2],
['c',3]
]
);
for(let item of arr.keys()//value()){
console.log(item)
}
m.forEach(function(value,key){
console.log(value,key);
})
什么情况下使用set和map
1、数据量比较大时。
2、当我们需要数组成员不重复时,可以使用set替代数组
3、当我们需要为程序中的一些对象存储数据时,可以使用map