set
ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化。
四个操作方法:
- add(value):添加某个值,返回Set结构本身。
- delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
- has(value):返回一个布尔值,表示该值是否为Set的成员。
- clear():清除所有成员,没有返回值
add
{
let set = new Set();
set.add(1);
set.add(2);
console.log(set.size);
}
输出结果:2
{
let arr = [1,2,3,4];
let set = new Set(arr);
console.log(set);
}
输出结果:Set(4) {1,2,3,4}
{
//数组去重
let arr = [1,2,3,4,3];
let set = new Set(arr);
console.log('unique',set)
}
输出结果:Set(4) {1,2,3,4}
has
{
// has
let arr = ['add','delete','has','clear'];
let set = new Set(arr);
console.log(set.has('has'));
}
输出结果:true
delete
{
// delete
let arr = ['add','delete','has','clear'];
let set = new Set(arr);
console.log(set.delete('delete'),set);
}
输出结果:true Set(3) {"add", "has", "clear"}
clear
{
// clear
let arr = ['add','delete','has','clear'];
let set = new Set(arr);
set.clear()
console.log(set);
}
输出结果:Set(0) {}
{
//set的遍历
let arr = ['add','delete','has','clear'];
let set = new Set(arr);
for(let key of set.keys()){
console.log('keys',key);
}
for(let value of set.values()){
console.log('values',value);
}
for(let [key,value] of set.entries()){
console.log('entries',key,value);
}
set.forEach(function(item){
console.log(item);
})
}
输出结果:weakset
和set区别:
- WeakSet支持的数据类型只能是对象。
- 没有clear()方法,没有set属性。
- 不能遍历。
- 不与垃圾回收机制挂钩。
map
Map结构提供了“值 -- 值”的对应,是一种更完善的Hash结构实现。如果你需要“键值对”的数据结构,Map比Object更合适。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。
{
let map = new Map();
let arr = ['123'];
map.set(arr,234);
console.log(map,map.get(arr))
}
输出结果:Map{['123']=>234} 234
{
let map = new Map([['a',123],['b',456]]);
console.log(map);
console.log('delete',map.delete('a'),map);
console.log('clear',map.clear(),map);
}
输出结果:遍历方法同set。
weakmap参考weakset。
优先使用map,当数据要求比较高,需要唯一性时使用set。