es6新增了几种数据结构。
set数据结构:
类似数组,但是里面不能有重复值,如果有重复值将只显示一个。
有长度属性size
数组用法:
let arr = ['a','b','a'];
let arr = new Array();
set用法:
let setArr = new Set(['a','b']);
console.log(setArr)://Set{'a','b'}
setArr.add('a'); 往setArr里添加一项
setArr.delete('b'); 在setArr里删除一项
setArr.has('a')//true/false 判断setArr里面有没有此值
setArr.size 个数
setArr.clear(); 清空
可用for...of...循环:
let setArr=new Set(['a','b','c']);
a). for(let item of setArr){ //默认是values(),和setArr.values()一样
console.log(item);
}
b). for(let item of setArr.keys())//也是a b c,无意义{console.log(item);}
c). for(let item of setArr.values()){}
d). for(let item of setArr.entries()){}
//[a,a][b,b][c,c] e). for(let [k,v] of setArr.entries()){}
//a a b b c c
f). setArr.forEach((value,index) =>{
console.log(value, index)//a a b b c c
});
add等方法可以像下面这样使用
let setArr = new Set().add('a').add('b').add('c');
用途一:数组去重:
let arr = [1,2,3,4,5,6,7,6,5,4,3,2,1,2,3,4,4];
let newArr = [...new Set(arr)];//将Set展开放进数组
console.log(newArr);
将set数据结构变成数组:[...Set]
演示让set使用数组的map循环和filter:
//未转数组方法
let set =new Set([1,2,3]);
let set2=new Set();
for(let value of set.values){
set2.add(value*2);
}
//转数组方法
let set3=new Set([…set].map(val=>val*2));//{2,4,6}
let set4=new Set([…set].filter(val=>val%2=0));//{2,}
是否能用set存储JSON
let arr = [{},{}];
new Set([]); 只建议存储数组
new WeakSet({}) 可以存储json,但这种写法不靠谱
WeakSet没有size,也没有clear(),有add(), has(), delete()
Set和WeakSet初始化时往里面添加{}是不行的。只能用用add()添加
总结:用new Set(),WeakSet没什么用,很可能以后被新版本删除
map数据结构:
类似 json, 但是json的键(key)只能是字符串
而map的key可以是任意类型
使用:
let map = new Map();
map.set(key,value); 设置一个值
map.get(key) 获取一个值
map.delete(key) 删除一项
map.has(key) 判断有没有
map.clear() 清空
let map = new Map();
let json={
a:1,
b:2
}
map.set('a','aaa');
map.set(json,'aaa');
map.set('b',json);
map.set(true,json);
console.log(map.get(json));//aaa
循环:
for(let [key,value] of map){}//和map.entries()一样
for(let key of map.keys()){}
for(let value of map.values()){}
for(let [k,v] of map.entries()){}//
a aaa
{a:1,b:2} aaa
b {a:1,b:2}
map.forEach((value, key) =>{
console.log(value, key);
})
WeakMap(): key只能是对象
总结:
Set 里面是数组,不重复,没有key,没有get方法
Map 对json功能增强,key可以是任意类型值
网友评论