为了账号安全,请及时绑定邮箱和手机立即绑定

【金秋打卡】第18天 再学JavaScript ES(6-10)全版本语法大全

标签:
JavaScript

课程名称:再学JavaScript ES(6-10)全版本语法大全
课程章节:2-24 Set数据结构
课程讲师:快乐动起来呀
课程内容:
ES6 提供了新的数据结构 Set,它类似于数组,但是成员的值都是唯一的,没有重复的值
Set本身是一个构造函数,用来生成 Set 数据结构
Set接收的参数是一个可遍历的对象,不是只有数组

let s = new Set()

Set 结构的实例有以下属性
Set.prototype.constructor:构造函数,默认就是Set函数
Set.prototype.size:返回Set实例的成员总数

Set 实例的方法分为两大类:操作方法(用于操作数据)和遍历方法(用于遍历成员)
Set.prototype.add(value):添加某个值,返回 Set 结构本身,存入重复的数据,Set会过滤
Set.prototype.delete(value):删除某个值,返回一个布尔值,表示删除是否成功
Set.prototype.has(value):返回一个布尔值,表示该值是否为Set的成员
Set.prototype.clear():清除所有成员,没有返回值

上面这些属性和方法的实例

s.add(1).add(1).add(2);
// 注意1被加入了两次
s.size // 2

s.has(1) // true
s.has(2) // true
s.has(3) // false

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

Set 结构的实例有四个遍历方法,可以用于遍历成员
Set.prototype.keys():返回键名的遍历器
Set.prototype.values():返回键值的遍历器
Set.prototype.entries():返回键值对的遍历器
Set.prototype.forEach():使用回调函数遍历每个成员

Set的遍历顺序就是插入顺序,这个特性有时非常有用,比如使用 Set 保存一个回调函数列表,调用时就能保证按照添加顺序调用

keys(),values(),entries()
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(item);
}
// ["red", "red"]
// ["green", "green"]
// ["blue", "blue"]

上面代码中,entries方法返回的遍历器,同时包括键名和键值,所以每次输出一个数组,它的两个成员完全相等。
Set 结构的实例默认可遍历,它的默认遍历器生成函数就是它的values方法。

Set.prototype[Symbol.iterator] === Set.prototype.values
// true

这意味着,可以省略values方法,直接用for…of循环遍历 Set。

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

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

forEach()
Set 结构的实例与数组一样,也拥有forEach方法,用于对每个成员执行某种操作,没有返回值。

let set = new Set([1, 4, 9]);
set.forEach((value, key) => console.log(key + ' : ' + value))
// 1 : 1
// 4 : 4
// 9 : 9

上面代码说明,forEach方法的参数就是一个处理函数
该函数的参数与数组的forEach一致,依次为键值、键名、集合本身(上例省略了该参数)
这里需要注意,Set 结构的键名就是键值(两者是同一个值),因此第一个参数与第二个参数的值永远都是一样的
另外,forEach方法还可以有第二个参数,表示绑定处理函数内部的this对象

课程收获:
Set没有提供直接改数据的方法,要改的话,要先删再添加。
图片描述

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消