set是ES6提供的数据结构,是值的集合, 它类似数组,但成员的值都是唯一的。
Set数据结构的创建
const s1 = new Set();
//接收参数可迭代对象(数组)初始化set
const s2 = new Set([1,2,2,3,4]);
console.log(s1) //Set{}
console.log(s2) //Set{1,2,3,4}
Set属性和原型方法
const s1 = new Set([1,2,3,4]);
//返回Set的值的个数
console.log(s1.size) //4
//在set尾部添加一个元素。返回该set。
s1.add('c')
console.log(s1); //Set{1,2, 3, 4, 'c'}
//删除指定数据 ,返回一个布尔值
var isdel = s1.delete(1)
console.log(isdel); //true
//判断该值是否为set的成员,返回布尔值
const ishas = s1.has(1);
console.log(ishas); //false
//清除所有的数据 ,没有返回值
sl.clear();
console.log(sl); //Set{}
//返回键名的迭代器iterator
console.log(sl.keys());
//Setiterator {1,2,3,4}
//返回键值的迭代器iterator
console.log(s1.values());
//Setiterator {1,2,3,4}
//返回名值对的迭代器iterator ;
console.log(s1.entries()); ;
//Setiterator {1 => 1,2 =>2,3 -> 3, 4 -> 4}
//由于Set只有值,所以键名和键值是一样的。
迭代Set
const s = new Set([1,2,3,4]);
//Set是可迭代对象(iterable),可以使用for of来遍历。Set内置[Symbol.iterator]是Set的
values()方法,返回Set值的迭代器。
for(let value of s) {
console.log(value); //1234
}
// forEach。遍历,Set本身没有key, forEach方法中的key被设置成了元素本身。
s.forEach((value, key) => {
console.log(value, key); //11 22 33 44
});
// for of遍历s.entries()
for (let v of s.entries()){
console.log(v)
}
// [1,1]
// [2,2]
// [3,3]
// [4,4]
Set和Array的转换
//数组转换成Set
const arr =[1,2, 2,'3','3']
let set = new Set(arr);
console.log(set) // Set(3) {1,2,"3"}
//Set转换成数组
let set = new Set();
set.add(1);
set.add('2');
console.log(Array.from(set)) // [1, "2"]
数组去重(转化成Set)
const arr = [1,1,'xiao','xiao',null,null]
let set = new Set(arr);
console.log([...set]) //[1, 'xiao', null]
//或者
console.log(Array.from(set)) //[1, 'xiao', null]