【ES6】Set & Map数据结构、Iterator遍历器

Set()

Set类似于数组,但是成员的值都是唯一的,没有重复的值。Set 本身是一个构造函数,用来生成 Set 数据结构。

const s = new Set(); 
let arr = [2, 3, 5, 4, 5, 2, 2]
arr.forEach(x => s.add(x));
console.log(s);	//Set(4) { 2, 3, 5, 4 }

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

let arr = [12,3,24,12,3,24]
console.log([...new Set(arr)])  //[ 12, 3, 24 ]

Set实例的属性和方法。

属性和方法描述
Set.prototype.constructor构造函数,默认就是Set函数。
Set.prototype.size返回Set实例的成员总数。
add(value)添加某个值,返回Set结构本身。
delete(value)删除某个值,返回一个布尔值,表示删除是否成功。
has(value)返回一个布尔值,表示该值是否为Set的成员。
clear()清除所有成员,没有返回值。
keys()返回键名的遍历器
values()返回键值的遍历器
entries()返回键值对的遍历器
forEach()使用回调函数遍历每个成员
let s = new Set()
//添加数据
s.add(10)
s.add(10)   //重复的数据自动过滤
s.add(20)
console.log(s)  //Set(2) { 10, 20 }
console.log(s.has(10))  //true
console.log(s.size)     //2
//删除
s.delete(20)
console.log(s)  //Set(1) { 10 }
//清空
s.clear()
console.log(s)  //Set(0) {}

let values = s.values()
console.log(values)     //[Set Iterator] {  }

Map()

Map类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。

也就是说,Object 结构提供了 “字符串—值” 的对应,Map结构提供了 “值—值” 的对应,是一种更完善的 Hash 结构实现。如果你需要 “键值对” 的数据结构,Map 比 Object 更合适。

Map 可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组。

const map = new Map([ ['name', '张三'], ['title', 'Author'] ]);
console.log(map)    //Map(2) { 'name' => '张三', 'title' => 'Author' }

Map实例的属性和方法。

属性和方法描述
Set.prototype.size返回 Map 结构的成员总数。
set(key, value)设置键名key对应的键值为value,返回整个 Map 结构。
get(key)读取key对应的键值,如果找不到key,返回undefined。
has(key)返回一个布尔值,表示某个键是否在当前 Map 对象之中。
delete(key)删除某个键,返回true。如果删除失败,返回false。
clear()清除所有成员,没有返回值
keys()返回键名的遍历器
values()返回键值的遍历器
entries()返回键值对的遍历器
forEach()使用回调函数遍历每个成员
let map = new Map()
//添加数据
map.set('name','tom')
map.set('age',12)
console.log(map)    //Map(2) { 'name' => 'tom', 'age' => 12 }
console.log(map.has('name'))  //true
//删除
map.delete('name')
console.log(map)    //Map(1) { 'age' => 12 }
//清空
map.clear()
console.log(map)    //Map(0) {}

Iterator【遍历器】

遍历器是一种接口,为各种不同的数据结构提供统一的访问机制,即for…of循环。任何数据结构只要部署Iterator接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。

Iterator 的遍历过程:

  • 创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。
  • 第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员。
  • 第二次调用指针对象的next方法,指针就指向数据结构的第二个成员。
  • 不断调用指针对象的next方法,直到它指向数据结构的结束位置。
let s = new Set([12,3,4])
let values = s.values()
console.log(values)         //[Set Iterator] { 12, 3, 4 }
console.log(values.next())  //{ value: 12, done: false }
console.log(values.next())  //{ value: 3, done: false }
console.log(values.next())  //{ value: 4, done: false }
console.log(values.next())  //{ value: undefined, done: true }

原生具备 Iterator 接口的数据结构有:Array、Map、Set、String、TypedArray、函数的 arguments 对象、NodeList 对象 等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值