Set
Set 的定义和使用
ES6 提供了新的数据结构 Set(集合)。它类似于数组,但 成员的值都是唯一的,集合实现了 iterator 接口,所以可以使用『扩展运算符』和『for...of』进行遍历。
定义一个 Set 集合:
let st1 = new Set();
let st2 = new Set([可迭代对象]);Copy to clipboardErrorCopied
集合(这里假设有一个集合 st)的属性和方法:
st.size:返回集合个数st.add(item):往集合中添加一个新元素item,返回当前集合st.delete(item):删除集合中的元素,返回boolean值st.has(item):检测集合中是否包含某个元素,返回boolean值st.clear():清空集合- 集合转为数组:
[...st] - 合并两个集合:
[...st1, ...st2]
集合案例
案例1: 数组去重
let arr1 = [1, 2, 2, 3, 3, 3, 4, 1, 2];
let res1 = [...new Set(arr1)];
console.log(res1); // [ 1, 2, 3, 4 ]Copy to clipboardErrorCopied
案例2:数组求交集
let arr2_1 = [1, 2, 2, 3, 4, 5];
let arr2_2 = [3, 6, 6, 7, 1, 4];
let res2 = arr2_1.filter(v => new Set(arr2_2).has(v))
console.log(res2); // [ 1, 3, 4 ]Copy to clipboardErrorCopied
案例3:数组求并集
let arr3_1 = [1, 2, 2, 3, 4, 5];
let arr3_2 = [3, 6, 6, 7, 1, 4];
let res3 = [...new Set([...arr3_1, ...arr3_2])];
console.log(res3); // [ 1, 2, 3, 4, 5, 6, 7 ]Copy to clipboardErrorCopied
案例4:数组求差集
let arr4_1 = [1, 2, 2, 3, 4, 5];
let arr4_2 = [3, 6, 6, 7, 1, 4];
let res4 = [...new Set(arr4_1)].filter(v => !(new Set(arr4_2).has(v)))
console.log(res4); // [ 2, 5 ]Copy to clipboardErrorCopied
Map
ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合。但是 “键” 的范围不限于字符串,各种类型的值(包括对象)都可以当作键。Map 也实现了 iterator 接口,所以可以使用『扩展运算符』和『for...of』进行遍历。
定义一个 Map:
let mp1 = new Map();
mp1.set('aaa', 111);
mp1.set('bbb', 222);
mp1.set('ccc', 333);
let mp2 = new Map([
['aaa', 111],
['bbb', 222],
['ccc', 333]
]);
console.log(mp1['aaa']); // 111
console.log(mp2.get('bbb')); // 222Copy to clipboardErrorCopied
Map 的属性和方法:(k 为键,v为值)
size:返回 Map 的元素(键值对)个数set(k, v):增加一个键值对,返回当前 Mapget(k):返回键值对的键值has():检测 Map 中是否包含某个元素clear():清空集合,返回undefined