聊聊Es6中的Set

基本用法

Set是Es6中的一种新的数据结构。它类似于数组,但是它的成员值都是唯一的。

我们可以用构造函数Set生成Set数据结构。

    const s = new Set();

    [2,3,5,4,5,2,3].forEach(item=>s.add(item));

    for(let i of s){
        console.log(i);// 2,3,5,4
    }

由上面代码可见,通过add方法可以向Set结构加入成员,而且,Set结构不会添加重复的值。

Set函数可以接受一个数组(或者具有interable接口的其他数据结构)作为参数,用来初始化。

//demo 01
const set = new Set([1,2,3,4,4,4]);
[...set] //[1,2,3,4]
set.size;//4

//demo 02
const itesetms = new Set(document.querySelectorAll("div"));
set.size://56  

上面例子中,例子1表明Set函数可以接收数组作为参数,例子2表明还可以接收类似数组的对象作为参数。

同时,上面代码也展示了一种去除数据重复成员的方法。

[...new Set(Array)]

在向Set中加入值的时候,不会发生类型转换,所以5和’5’是两个不同的值。
Set内部判断两个值是否不同,使用的算法叫做“ Same-value-zero equality ” ,它类似于精确相等运算符(===),主要区别是
NaN 等于自身,而精确相等运算符任务 NaN 不等于自身。

javascript
let set = new Set();
let a = Nan;
let b = Nan;
set.add(a);
set.add(b);
set;// Set {Nan}

两个对象总是不相等的。

let set = new Set();

set.add({});
set.size;//1

set.add({});
set.size;//2

上面代码表示,两个空对象不相等,它们被视为两个值。

Set实例的属性和方法

Set结构是实例有以下属性:

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

  • Set.prorotype.size: 返回 Set 实例的成员总数

Set实例的方法分为两大类方法:操作方法(用于操作数据)和 遍历方法(用于遍历成员)。

四个操作方法:

- add(value): 添加某个值,返回 Set 结构本身。
- delete(value): 删除某个值,返回一个布尔值,表示删除是否成功(删除不存在的值,返回false)。
- has(value): 返回一个布尔值,表示该值是否为 Set 的成员。
- clear():清除所有成员,没有返回值。

在判断是否包含一个键上面,Object结构和Set结构的写法是不一样的。

//对象的写法
const onject = {
    'width':1,
    'height':1
};
if(object[comeName]){
    // do something
}

//Set 的写法
const s = new Set();

s.add('width');
s.add('height');
if(s.has(someName)){
    //do something
}

Array.from 方法可以将Set结构转换为数组。

const items = new Set([1,2,3,4,5]);
const array = Array(items);

一种去除数组重复成员的另外一种方法:

function dedupe(array){
    return Array.from(new Set(array));
}

遍历操作

Set 结构的实例有四个遍历的方法:

- keys(): 返回键名的遍历器
- values(): 返回键值的遍历器
- entries(): 返回键值对的遍历器
- forEach(): 使用回调函数遍历每个成员

Set 的遍历顺序就是插入的顺序。

keys(), values(), entries()

由于Set结构没有键名,只有键值(或者说键名和键值是同一个值),所以 keys 方法和 values 方法 的行为完全一致。

let set = new Set(['red','green','blue']);

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

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

for(let item of set.entries()){
    console.log(items;
}
// ["red","red"]
// ["green","green"]
// ["blue","blue"]

Set结构的实例默认可遍历,它的默认遍历器

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值