ES6 set数据结构/map数据结构
ES6中新增,set集合和map集合就是一种数据的存储结构(在ES6之前数据存储结构只有array,object),不同的场景使用不同的集合去存储数据
1.set集合
Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。
const s1 = new Set(iterable);
1.1 API
名称 |
类型 |
简介 |
Set.add() |
原型方法 |
添加数据 |
Set.has() |
原型方法 |
判断是否存在一个数据 |
Set.delete() |
原型方法 |
删除数据 |
Set.clear() |
原型方法 |
清空集合 |
Set.size属性 |
属性 |
集合长度 |
for of |
原型方法 |
遍历 |
const s1 = new Set();
s1.add(1)
s1.add(2)
s1.add(3)
s1.add(4)
s1.add(1)
console.log(s1)
console.log(s1.has(1))
console.log(s1.has(10))
s1.delete(1)
console.log(s1)
console.log(s1.delete(10))
s1.clear()
console.log(s1)
console.log(s1.size)
for(const item of s1){
console.log(item)
}
s1.forEach((item, index, s) => {
console.log(item, index, s)
})
1.2 使用场景
const arr = [1,1,22,22,3,1,88,88,65,123,444,65];
const s = new Set(arr);
console.log([...s]);
const result = [...new Set(arr)];
console.log(result);
const arr1 = [12,34,55,33,11,33,5,12];
const arr2 = [55,34,11,78,10,19,88,88,99,99];
const cross = [...new Set(arr1)].filter(item => arr2.indexOf(item) >= 0);
console.log(cross);
const result = [...new Set([...arr1,...arr2])];
console.log(result);
let arr4 = result.filter(item=>{
return arr1.includes(item) && !arr2.includes(item) || !arr1.includes(item) && arr2.includes(item)
})
console.log(arr4)
2.map集合(映射)
Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。
let swk=new Map()
console.log(swk);
1.1 API
名称 |
类型 |
简介 |
Map.set(key,value) |
原型方法 |
添加数据 |
Map.get(key) |
原型方法 |
获取数据 |
Map.has(key) |
原型方法 |
判断是否存在一个数据 |
Map.delete(key) |
原型方法 |
删除数据 |
Map.clear() |
原型方法 |
清空集合 |
Map.size属性 |
原型方法 |
集合长度 |
for of |
原型方法 |
遍历 |
let swk=new Map();
console.log(swk);
swk.set('uname', '孙悟空');
swk.set('age', 600);
swk.set('master', '唐僧');
swk.set('weapon', '金箍棒');
console.log(swk);
swk.set('age', 601);
console.log(swk);
console.log(swk.get('uname'));
console.log(swk.get({}));
console.log(swk.has('uname'));
console.log(swk.has({}));
swk.delete('weapon');
console.log(swk);
console.log(swk.size);
for (let [key, value] of swk) {
console.log(key, value);
for (let item in value) {
console.log(value[item])
}
}
console.log('=====forEach=====');
swk.forEach((item, index, map) => {
console.log(index);
console.log('==========');
console.log(item);
console.log('==========');
console.log(map);
console.log('==========');
})
1.2 Maps 和 Objects 的区别
- 一个 Object 的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值(字符串,对下个,函数,NaN)。
- Map 中的键值是有序的,而添加到对象中的键则不是。
- Map 的键值对个数可以从 size 属性获取,而 Object 的键值对个数只能手动计算。
- Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突。

