「这是我参与2022首次更文挑战的第27天,活动详情查看:2022首次更文挑战」。
Set
Set的概念
set的数据集合类似于数组,本身是一个构造函数,用来生成Set结构。
- set值唯一,没有重复的值
- 常用于去除重复的数据
- key和value值相等
- 在set内部,两个NaN相等,两个对象不相等
创建一个set
let set = new Set([1,2,"a",1,"a","b"]);
console.log(set); // 值是唯一的
console.log(...set);// 输出单个元素
console.log([...set]);// 输出数组
console.log([...set].join(''));// 去除字符串里面的重复字符
console.log(Array.from(set));// Array.from方法可以将 Set 结构转为数组。
交集,并集,差集
let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);
// 并集
let union = new Set([...a, ...b]);
console.log(union);
// 交集
let intersect = new Set([...a].filter(x => b.has(x)));
console.log(intersect);
// 差集
let difference = new Set([...a].filter(x => !b.has(x)));
console.log(difference);
在遍历中改变set结构的2种方法
- 扩展运算符(...)内部使用for...of循环
- 数组的map和filter方法也可以间接用于 Set
// 方法一
let set1 = new Set([1, 2, 3]);
set1 = new Set([...set1].map(val => val * 2));
// set的值是2, 4, 6
// 方法二
let set2 = new Set([1, 2, 3]);
set2 = new Set(Array.from(set2, val => val * 2));
// set的值是2, 4, 6
set的属性
sizeset的长度add添加属性 可以用连缀的写法delete删除一个属性 不可以连缀 因为删除返回的是一个布尔值has判断 集合中是有有该属性clear清除set中的所有属性
set.add(5).add(6); // 返回set本身 可以连缀
set.delete("a") ; // 返回true或者false
set.has("a"); // 返回 true或者false
set.keys(); // 获取所有的keys
set.values(); // 获取所有的值
set.entries(); // 获取所有的键和值
set.forEach(function (value,key) {
console.log("key "+key+" value"+value)
});
set.clear(); //没有返回值、
console.log(set.size);
遍历操作
Set.prototype.keys():返回键名的遍历器Set.prototype.values():返回键值的遍历器Set.prototype.entries():返回键值对的遍历器Set.prototype.forEach():使用回调函数遍历每个成员keys方法、values方法、entries方法返回的都是遍历器对象。 Set 结构没有键名,只有键值(或者说键名和键值是同一个值),所以keys方法和values方法返回的一致。
console.log(set.keys());
console.log(set.values())
set.forEach(function (keys,values) {
console.log(keys + "keys----" + values + "values");
})
扩展运算符(...)内部使用for...of循环,所以也可以用于 Set 结构。
let set = new Set(['red', 'green', 'blue']);
let arr = [...set];
// ['red', 'green', 'blue']
数组的map和filter方法也可以间接用于 Set 了
let set = new Set([1, 2, 3]);
set = new Set([...set].map(x => x * 2));
// 返回Set结构:{2, 4, 6}
let set = new Set([1, 2, 3, 4, 5]);
set = new Set([...set].filter(x => (x % 2) == 0));
// 返回Set结构:{2, 4}
以上就是ES6中的Set结构了,使用好Set可以给我们带来极大的便利。减少更多的工作量。