咏竹莉
where there is a will,there is a way

ES6 Set

了解Set 

ES6 提供了set数据结构,类似于数组,但是没有重复值

1. set 本身是一个构造函数,用于生成Set数据结构

const s = new Set();
[1,2,5,3,3].forEach(x => s.add(x));
for (let item of s) {
    console.log(item)  1 2 5 3    // 有序
}

 

2. Set 可以接受一个数组(或者数组对象)作为参数,用于初始化

var set = new Set([1,2,2,3])
console.log([...set])   // [1,2,3]

 

可用于数组去重  [...new Set(array)]

Array.from() 方法可以将Set结构转换为数组 Array.from(new Set(array))

 

Set实例的属性和方法

1. 属性:

 · Set.prototype.constructor:  构造函数,默认是Set函数

 · Set.prototype.size:  返回实例的成员总数

 

2. 操作方法(方法的具体实现)

· add(value):  添加一个值,返回Set结构本身

· delete(value):删除某个值,返回布尔值

· has(value) : 返回布尔值,表示是否是成员

· clear():  清除所有成员,无返回值

 

s.add(1).add(2).add(2);   // 链式写法
s.size();    // 2
s.has(3);   // false

s.delete(2);
s.has(2);  // false

 

3.  遍历方法

  · keys():  返回键名的遍历器 (什么是遍历器? Iterator)

  · values(): 返回键值的遍历器

  · entries():  返回键值对的遍历器

  · forEach(): 使用回调函数遍历每个成员

 这里要注意Set的键名和键值是同一个值,所有key() 和values() 行为是一致的

let set = new Set(["red","green","no"]);
for (let item of set.keys()) {
    console.log(item);   // red green no
}   

for(let item of set.values()){
  console.log(item);  // red green no 
}

for(let item of set.entries()){
  console.log(item);  // ['red':'red'] ['green':'green']  ['no':'no']  
}

// 对每个成员执行某种操作,参数依次为键值、键名、集合本身
new Set([1,2,3]).forEach(value,key) => console.log(value*2); 2 4 6

 

数组的map() filter() 可用于Set

// set 使用map方法
let set1 = new Set([1,2,3].map(item => item*2))
console.log(set1) // {2,4,6}

// set 使用filter方法
let set2 = new Set([1,2,3].filter(item => (item % 2) === 0))
console.log(set2) // {2}

 

 

详见: https://segmentfault.com/a/1190000008804891

 

posted on 2021-03-04 14:11  咏竹莉  阅读(152)  评论(0)    收藏  举报