JavaScript下一版本标准ES6的Set集合使用详解
什么是Set集合
Set是一种新的数据结构,它类似于数组,但是成员的值都是唯一的,没有重复的值。Set有以下特点:
- Set内部使用Hash表存储元素,导致元素的顺序不是按照插入顺序保存,但是一组具有相同内容的对象在Set内只有一份。
- Set添加元素时,不会进行类型转换,比如1和"1"是两个不同的值。因此,Set内部判断两个值是否相等,使用的是“Same-value-zero equality”算法,类似于Javascript使用的“===”来比较,区别是Set将NaN视为相等。
- Set的成员可以是任意类型,包括对象的引用,但是添加到Set中的对象必须是唯一的。
Set集合的基本使用
创建Set对象
我们可以使用Set类来创建Set对象,创建一个空的Set对象可以用空的参数列表:
const set = new Set();
也可以使用数组作为Set对象的初始化值,数组中的重复元素会被当成一个元素处理:
const arr = [1,2,2,3,3,3];
const set = new Set(arr);
// set: Set(3) { 1, 2, 3 }
Set对象的基本操作
使用add方法向Set对象中添加元素,delete方法删除元素,clear方法清空Set对象;使用size属性获取Set集合中元素的数量。
const set = new Set();
set.add(1);
set.add(2);
set.add(3);
console.log(set);//Set(3) {1, 2, 3}
set.delete(2);
console.log(set);//Set(2) {1, 3}
set.clear();
console.log(set);//Set(0) {}
console.log(set.size);//0
Set对象的遍历
- values()方法返回一个包含Set集合内所有值的迭代器
- keys()方法返回一个包含Set集合内所有值的迭代器(与values()方法相同)
- entries()方法返回一个包含Set集合内所有值的迭代器(与values()方法相同)
const set = new Set(['a', 'b', 'c', 'd']);
for (const val of set.values()) {
console.log(val);
}
// 输出:a b c d
Set集合的高级用法
交集、并集和差集
- union:获取两个集合的并集
- intersection:获取两个集合的交集
- difference:获取两个集合的差集
const a = new Set([1, 2, 3, 4]);
const b = new Set([3, 4, 5, 6]);
// union
const union = new Set([...a, ...b]);
console.log(union); // Set(6) { 1, 2, 3, 4, 5, 6 }
// intersection
const intersection = new Set([...a].filter(x => b.has(x)));
console.log(intersection); // Set(2) { 3, 4 }
// difference
const difference = new Set([...a].filter(x => !b.has(x)));
console.log(difference); // Set(2) { 1, 2 }
Set集合和数组之间的转换
- Set转成Array
const set = new Set([1, 2, 3]);
const arr = Array.from(set);
console.log(arr); // [1, 2, 3]
- Array转成Set
const arr = [1, 2, 3, 3, 2, 1];
const set = new Set(arr);
console.log(set); // Set(3) {1, 2, 3}
示例说明
示例一:使用Set获取数组中的不重复元素
const arr = [1, 2, 2, 3, 3, 4, 5, 5];
const unique = [...new Set(arr)];
console.log(unique); // [1, 2, 3, 4, 5]
示例二:判断两个数组是否完全相同
const a = [1, 2, 3];
const b = [1, 2, 3];
const c = [1, 2, 4];
const isEqual = (arr1, arr2) => {
const s1 = new Set(arr1);
const s2 = new Set(arr2);
if (s1.size !== s2.size) {
return false;
}
for (let i of s1) {
if (!s2.has(i)) {
return false;
}
}
return true;
}
console.log(isEqual(a, b)); // true
console.log(isEqual(a, c)); // false
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript下一版本标准ES6的Set集合使用详解 - Python技术站