ES6新增Set集合
2019-06-19 本文已影响0人
易路先登
1 Set集合的获取
类似于数组但不是数组,它的元素是不可重复的。
- 构造函数加set.add(arg)方法
let setList = new Set();
setList.add(1);
setList.add(2);
setList.add(1);
console.log(setList );//{1,2}
- 构造函数初始化
let arr = [1,2,1];
let setList = new Set(arr);
console.log(setList );//{1,2}
可以利用set集合元素不重复,构造函数初始化时可传入数组的特点对数组进行去重操作
let arr = [1,2,1];
let setList = new Set(arr);
arr = Array.from(setList);
console.log(arr);//[1,2]
2 Set的‘长度’set.size
let arr = [1,2,1];
let setList = new Set(arr);
console.log(setList .size);//2
3 Set是一种数据容器,存在增删改查操作(curd)下面做个简单介绍:
- 增 set.add(arg)
let setList = new Set();
setList.add(1);
console.log(setList );//{1}
- 删
- set.delete(arg)删除某个元素
- set.clear()删除全部元素
let setList = new Set();
setList.add(1);
setList.add(2);
setList.add('3');
console.log(setList );//{1,2,'3'}
setList.delete(1);
console.log(setList );//{2,'3'}
setList.clear();
console.log(setList );//{}
- 改 遍历,找到对应项进行修改,如要修改setList 集合中的name是'张三的项的年龄为30
let setList = new Set();
setList.add({name:'zhangsan',age:18});
setList.add({name:'lisi',age:18});
setList.add({name:'王五',age:18});
let arr = setList.forEach((value,key,set)=>{
if(value.name==='zhangsan'){
value.age = 30;
}
})
console.log(setList);
/*{
{name: "zhangsan", age: 30},
{name: "lisi", age: 18},
{name: "王五", age: 18}
}
*/
注意:这还是set集合中放置的是引用类型元素时的改方法,如果想改变基本类型值得元素,只能通过delete再add,但位置就无法对应,所以几乎是不可能的。
- 查 set.has(arg)
let setList = new Set();
setList.add(1);
setList.add(2);
setList.add('3');
console.log(setList.has('3') );//true
4 set的遍历
- let...of
let setList = new Set();
setList.add(1);
setList.add(2);
setList.add('3');
for(let key of setList.keys()){
console.log(key);
}//1 2 '3'
for(let value of setList.values()){
console.log(value);
}//1 2 '3'
for(let [key,value] of setList.entries()){
console.log(key,value);
}//1 1 2 2 '3' '3'
- forEach
let setList = new Set();
setList.add(1);
setList.add(2);
setList.add('3');
setList.forEach(function(item){
console.log(item);
})//1 2 '3'
5 WeakSet
let weakList = new WeakSet();
let obj = {};
weakList .add(obj );
console.log(weakList );
从上边代码看似乎WeakSet与Set没啥区别,请注意weak是虚弱阉割的意思,WeakSet相对于Set多了很多限制,如下:
- 只能存放引用类型的元素(而且还是弱引用,会被js垃圾回收机制忽视)
- 没有clear方法
- 不能遍历
- 没有size属性
ES6总篇--目录