ES6的Set数据结构

ES6:Set

大神地点:来自阮一峰大神的ES6入门书本

相识Set

ES6供应了数据构造Set。类似于数组,然则没有反复值。

  • Set本身是一个组织函数,用来天生Set数据构造
const s = new Set();
[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));
for(let i of s ) {
    console.log(i); //2 3 5 4
}
  • Set能够接收一个数组(或许类数组对象)作为参数,用来初始化
var set = new Set([1, 2, 3, 4, 4]);
[...set]; // [1, 2, 3, 4]

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

Array.from()要领能够将Set构造转换为数组Array.from(new Set(array))

  • 向Set到场值时,不会发作范例转换(类似于准确相称===),然则要注意在Set里NaN是即是本身的。别的两个对象老是不相称的。
let set = new Set();
let a = NaN;
let b = NaN;
set.add(a);
set.add(b);
set; //{NaN} 只能到场一个,申明Set内部两个NaN是相称的

Set实例的属性和要领

  • 属性:

    • Set.prototype.constructor:组织函数,默许就是Set函数
    • Set.prototype.size:返回实例的成员总数
  • 操纵要领(要领的详细完成见:我对JS鸠合的简朴进修):

    • 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 
  • 遍历要领

    • 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

操纵鸠合

let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);

//并集
let union = new Set([...a, ...b]); //{1, 2, 3, 4}

//交集
let intersect = new Set([...a].filter(x => b.has(x))); //{2, 3}

//差集
let difference = new Set([...a].filter(x => !b.has(x))); //{1}

号外:扩大运算符(…)内部运用for…of轮回,所以应当晓得for of是干吗的吧

数组的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}
    原文作者:luckyzv
    原文地址: https://segmentfault.com/a/1190000008804891
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞