ES6中Set的数据结构

ES6 提供了新的数据结构Set。它类似于数组,但打印出来的是对象的格式,并且成员的值都是唯一的,没有重复的值。

Set本身是一个构造函数,用来生成 Set 数据结构;

//new Set() 里面要传的话只能传数组
const a = new Set([1, 2, 3, 4, 5, 5, 5, 5]) 
//new Set之后返回的是一个对象
console.log(a) //Set { 1, 2, 3, 4, 5 }

a.add(1) // 由于a里面已经有1了 所以这里不会加进去 
//转为数组
console.log('a=',[...a]) // a= [ 1, 2, 3, 4, 5 ]

//向 Set 加入值得时候, 是不会发生类型转换的, 所以'1' 和 1 是两个不同的值
a.add('1')
//转为数组; 方式一: 展开运算符
console.log('items=',[...a]) //items= [ 1, 2, 3, 4, 5, '1' ]
//方式二:  使用Array.from(items)
console.log('items=',Array.from(a)) //items= [ 1, 2, 3, 4, 5, '1' ]
复制代码
  • [注意点1] Set 内部判断两个值是否相同, 类似于 === 会判断两个值得类型, 有一个例外, 在Set中认为 NaN等于NaN的,但是精准运算符(===)认为NaN不等于NaN自身
let set = new Set();
const c = NaN;
const d = NaN;
set.add(c);
set.add(d);
//只会添加进去一个NaN
console.log('set',...set)  // Set {NaN} 
复制代码
  • [注意点2] 两个对象, 或者两个数组 总数不相等的 地址不同
let a = new Set();

a.add({});
console.log('a.size=%j,a=%j',a.size,a)  //a.size=1,a={}

a.add({});
console.log('a.size=%j,a=%j',a.size,a)  //a.size=2,a={}
复制代码

Set 实例的属性和方法

  • [add(value)]:添加某个值,返回 Set 结构本身。
  • [delete(value)]:删除某个值,返回一个布尔值,表示删除是否成功。
  • [has(value)]:返回一个布尔值,表示该值是否为Set的成员。
  • [clear()]:清除所有成员,没有返回值。 由于 Set 结构没有键名,只有键值(或者说键名和键值是同一个值
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(item);
}
// ["red", "red"]
// ["green", "green"]
// ["blue", "blue"]
复制代码

Set 遍历操作

  • [keys()]:返回键名的遍历器
  • [values()]:返回键值的遍历器
  • [entries()]:返回键值对的遍历器
  • [forEach()]:使用回调函数遍历每个成员 参考 es6.ruanyifeng.com/#docs/set-m… 如有侵权 请联系发布者删除.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值