Web前端高级编程学习笔记13:Set与Map

Set

集合
类似于数组,但其成员的值都是唯一的、不重复。

创建方法

Set本身是一个构造函数。

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

add( )方法可以添加元素到Set实例中,但不会添加重复的值。

初始化

Set函数可以接受一个数组(或具有Iterable接口的其他数据结构)来初始化Set实例。

let set=new Set([1,2,3,4,4])
console.log([...set])
//[1,2,3,4]

可应用于 去掉数组中的重复值;去掉字符串中的重复字符

属性

constructor,构造函数,默认就是Set函数。
size,返回Set实例的成员数量。

方法

操作方法

用于操作数据。
add(value),添加值,返回该Set实例的引用。

let s1=new Set([3,5,7]);
s1.add(1)
//{1,3,5,7}

delete(value),删除值,返回一个布尔值。

s1.delete(1)
//true
s1.delete(1)
//false

has(value),返回一个布尔值,表示该值是否是Set实例成员。

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

clear(),清除所有成员,没有返回值。

s1.clear()
s1
//{}
//可应用于表格页面分页
可用[...s1].join("-")拼接数组
//"3-5-7"

遍历方法

用于遍历成员。
keys( ),返回键名的遍历器。
values( ),返回键值的遍历器。
entries( ),返回键值对的遍历器。
forEach( ),使用回调函数遍历每个成员,没有返回值。

let s2=new Set(["abc","cde","efg"])
for(let s of s2){
    console.log(s)
}
//abc
//cde
//efg

s2.forEach(x=>console.log(x.toUpperCase()))
//ABC
//CDE
//EFG

s2.forEach((value,key,s)=>{
    s.add(x.repeat(2));
})
//三个参数的回调没什么意义

WeakSet

与Set的区别

WeakSet的成员只能是对象。
WeakSet中的对象都是弱引用。

垃圾回收机制不考虑WeakSet对该对象的引用。 如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占的内存。

应用场景

WeakSet 适合临时存放一组对象,以及存放跟对象绑定的信息。
只要这些对象在外部消失,它在WeakSet 里面的引用就会自动消失。

ES6 规定WeakSet 不可遍历。

Map

Map类型是键值对的有序列表,而键和值都可以是任意类型。

let m1=new Map()

相较于Object

Object只能用字符串当作键,其他类型作为键时会自动转换为字符串。

字符串 - 值 的配对
任何数据类型转化为字符串都更稳定。

Map可以直接使用各种类型的值(包括对象)作为键。

值 - 值 的配对

Object重在表达对象,Map 重在表达数据结构——字典。

基本用法

set (key,value),设置(添加)键值对。
get(key),通过key获取对应值。
类似Set的方法和属性:has(key),delete(key),clear( ),size。

Map构造函数可以接收一个数组作为参数。

let map=new Map([
[ 'name', ' zhang'],
[ 'title' , ' Author' ]
]);

不仅是数组,任何具有Iterator接口、且每个成员都是一个双元素的数组的数据结构都可以作为Map构造函数的参数。

只有对同一个对象的引用,Map才认为是同一个键。

const mm=new Map();
mm.set(["a"], 5);
console. log (mm.get(["a"]));
const k1={};
const k2={};
mm.set(k1, 100) ;
mm.set(k2, 200) ;
console. log (mm.get(k1),mm.get(k2));

Map的键实际上是和内存地址绑定的,只要内存地址不一样,就是为两个键。

如果Map的键是一个简单类型的值(数值,字符串,布尔值),只要两个值严格相等,Map 就认为是同一个键。

遍历方法

keys( ),返回键名的遍历器。
values( ),返回键值的遍历器。
entries( ),返回所有成员的遍历器。
forEach( ),遍历Map的所有成员。
Map结构的默认遍历器接口( Symbol. iterator属性),就是entries方法。

const map=new Map([
    ["F","no"],
    ["T","yes"]
]);
for(let [key,value] of map.entries()){console.log(key,value)}
// F no
// T yes

for(let [key,value] of map){console.log(key,value)}
// F no
// T yes
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值