1.基本用法
ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
Set
本身是一个构造函数,用来生成 Set 数据结构。
let s = new Set();
console.log(s); //Set(0) {size: 0}
let s = new Set("hellor");
console.log(s); //Set(5) {'h', 'e', 'l', 'o', 'r'}
console.log([...s]); //['h', 'e', 'l', 'o', 'r']
let s = new Set([1, 2, 3, 4]);
console.log(s); // {1, 2, 3, 4}
console.log([...s]); // [1, 2, 3, 4]
2.Set的用途
可以进行数组去重:代码如下:
//使用set进行数组去重 方法一:
let arr = [2, 3, 2, 3, 2, 3, 3, 4, 5];
function getset(arrs) {
let s = new Set(arrs);
let arr1 = Array.from(s);
return arr1;
}
console.log(getset(arr)); //[2, 3, 4, 5]
//使用set进行数组去重 方法二:
let arr = [2, 2, 3, 3, 5, 6, 6];
function getset(arrs) {
return [...new Set(arr)];
}
console.log(getset(arr)); // [2, 3, 5, 6]
字符串去重:代码如下:
console.log([...new Set('helloe')].join('')); //helo
3.Set实例的操作方法
特点:数据不重复
// Set实例的操作方法
//特点:数据不重复
let s = new Set();
//1、add(value),添加某个值,返回实例本身
console.log(s.add('a')); // {'a'}
console.log(s.add('b')); //{'a', 'b'}
s.add("c");
s.add("d");
s.add("c");
console.log(s); //{'a', 'b', 'c', 'd'}相同的数据添加不进去
//2、delete(value),删除某个值,返回布尔值,表示删除是否成功
s.delete("a");
console.log(s); //{'b', 'c', 'd'}
//3、clear(),清空所有成员,没有返回值
s.clear()
console.log(s); //{size: 0}
4. Set实例的遍历方法
forEach方法:
let s = new Set([1, 2, 3, 4, 5])
s.forEach((v1, v2) => {
console.log(v1 + ' : ' + v2);
// 1 : 1
// 2 : 2
// 3 : 3
// 4 : 4
// 5 : 5
});
上面代码说明,forEach方法的参数就是一个处理函数。该函数的参数与数组的forEach一致,依次为键值、键名、集合本身(上例省略了该参数)。
这里需要注意,Set 结构的键名就是键值(两者是同一个值),因此第一个参数与第二个参数的值永远都是一样的。
由于 Set 结构没有键名,只有键值(或者说键名和键值是同一个值),所以keys方法和values方法的行为完全一致。
entries方法返回的遍历器,同时包括键名和键值,所以每次输出一个数组,它的两个成员完全相等。
let s = new Set([1, 2, 3, 4, 5]);
keys();
console.log(s.keys()); //{1, 2, 3, 4, 5}
values();
console.log(s.values()); //{1, 2, 3, 4, 5}
entries()
console.log(s.entries()); //{1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5}
console.log(s); //{1, 2, 3, 4, 5}
5.Set和数组之间的相互转换
数组转Set:
//把数组转换成set
// 方法一
let ary = [2, 3, 4, 55, 66];
let s1 = new Set(ary);
console.log(s1); //{2, 3, 4, 55, 66}
//方法二
let ary = [2, 3, 4, 55, 66];
let s2 = new Set();
ary.forEach(function(item) {
s2.add(item);
})
console.log(s2); //{2, 3, 4, 55, 66}
Set转数组:
//把set转为数组
//方法一
let s4 = new Set();
s4.add(2);
s4.add(8);
s4.add(3);
let arr4 = Array.from(s4);
console.log(arr4); //[2, 8, 3]
//方法二
let s5 = new Set();
s5.add(4);
s5.add(9);
s5.add(6);
s5.add(5);
let arr5 = [...s5];
console.log(arr5);//[4, 9, 6, 5]
//方法三
let s6 = new Set();
s6.add(9);
s6.add(10);
s6.add(11);
s6.add(12);
s6.add(13);
let arr6 = [];
s6.forEach(function(item) {
arr6.push(item);
});
console.log(arr6); // [9, 10, 11, 12, 13]