ES6 Set 和 Map

Set

Set是无重复值的有序列表。

let s = new Set();
console.log(s);
运行结果:
Set(0) {}

可以看到,属性和方法如下:
在这里插入图片描述
给 Set 添加元素:

let s = new Set();
s.add(1).add(2).add(3).add(1).add(2).add(4).add(5).add(6);
console.log(s);
运行结果:
VM391:3 Set(6) {1, 2, 3, 4, 5, 6}

Set 不会对添加的元素进行强制类型转换,两个值类型不同,则是不相同的,可以添加进Set 中。

let s = new Set();
s.add(3).add("3");
console.log(s);
运行结果:
VM1315:3 Set(2) {3, "3"}

Set也可以添加对象:

let s = new Set();
s.add({}).add({});
console.log(s);
运行结果:
VM1397:3 
Set(2) {{}, {}}
[[Entries]]
0: Object
1: Object
size: 2

删除元素:

let s = new Set();
s.add(1).add(2).add(3).add(1).add(2).add(4).add(5).add(6);
console.log(s);
s.delete(5);
console.log(s);
运行结果:
VM460:3 Set(6) {1, 2, 3, 4, 5, 6}
VM460:5 Set(5) {1, 2, 3, 4, 6}

初始化:

const s = new Set(['1','2','3']);
console.log(s);
运行结果:
VM497:2 Set(3) {"1", "2", "3"}

计算长度:

let s = new Set();
s.add(1).add(2).add(3).add(1).add(2).add(4).add(5).add(6);
console.log(s);
s.size;
运行结果:
VM692:3 Set(6) {1, 2, 3, 4, 5, 6}
6

特点:

(1)类似于数组,但是元素的值没有重复;

(2)可以接收一个数组作为参数,用来初始化。

用途:

(1)数组去重:

[...new Set([1,2,5,6,2,2,3,1,4,51,2])];
运行结果:
(7) [1, 2, 5, 6, 3, 4, 51]

(2)字符串去重:

[...new Set('ababbc')]
运行结果:
(3) ["a", "b", "c"]
[...new Set('ababbc')].join('')
运行结果:
"abc"

Set 和数组的相互转换:

(1)数组转化为 Set:

const s = new Set(['1','2','3']);
console.log(s);
运行结果:
VM1728:2 Set(3) {"1", "2", "3"}

(2)Set 转化为数组:

let s = new Set([1, 2, 3, 4, 4]);
[...s] 
运行结果:
(4) [1, 2, 3, 4]

Map

Map是有序的键值对,其中的键允许是任何类型。

let m = new Map();
console.log(m);
运行结果:
VM773:2 Map(0) {}

属性和方法如下:
在这里插入图片描述
给 Map 添加值:

let m = new Map();
m.set("name","xiaoming");
m.set("grade",3);
m.set(1,"grade");
m.set("sex","boy");
console.log(m);
运行结果:
VM989:6 Map(4) 
{"name" => "xiaoming", "grade" => 3, 1 => "grade", "sex" => "boy"}

取出 Map 中的值:

let m = new Map();
m.set("name","xiaoming");
m.set("grade",3);
m.set(1,"grade");
m.set("sex","boy");
console.log(m);
m.get("sex");
运行结果:
VM1148:6 Map(4) 
{"name" => "xiaoming", "grade" => 3, 1 => "grade", "sex" => "boy"}
"boy"

Map 可以将对象作为键:

let m = new Map();
m.set({});
m.set({});
m.set(1,"grade");
m.set("sex","boy");
console.log(m);
运行结果:
VM1472:6 Map(4) {{} => undefined, {} => undefined, 1 => "grade", "sex" => "boy"}

也可以将数组传入 Map:

let m = new Map();
m.set({});
m.set([1,2,2,3]);
m.set(1,"grade");
m.set("sex","boy");
console.log(m);
console.log(m);
运行结果:
Map(4) {{} => undefined, Array(4) => undefined, 1 => "grade", "sex" => "boy"}

在这里插入图片描述

Map 和数组的相互转换:

(1)Map 转化为数组:

let m = new Map();
m.set(1,"grade");
m.set("sex","boy");
console.log(m);
console.log([...m]);
运行结果:
VM1968:4 
Map(2) {1 => "grade", "sex" => "boy"}
[[Entries]]
0: {1 => "grade"}
1: {"sex" => "boy"}
size: (...)
__proto__: Map
VM1968:5 
(2) [Array(2), Array(2)]
0: (2) [1, "grade"]
1: (2) ["sex", "boy"]
length: 2
__proto__: Array(0)

(2)数组转化为 Map:

const m=new Map([
    ["sex","boy"],
    [{"grade":3},['abc']]
]);
console.log(m);
运行结果:
VM2027:5 
Map(2) {"sex" => "boy", {} => Array(1)}
[[Entries]]
0: {"sex" => "boy"}
key: "sex"
value: "boy"
1: {Object => Array(1)}
key: {grade: 3}
value: ["abc"]
size: 2
__proto__: Map

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: ES6中的SetMap是两种新增的集合类型。Set是一种无重复值的集合,可以通过new Set()来创建。它具有add方法用于向集合中添加元素,has方法用于判断集合中是否存在某个元素,clear方法用于清空集合。Set也可以用于数组去重,通过new Set(\[...\])的方式将数组转换为Set,利用Set的特性去除重复值。\[1\] Map是一种键值对的集合,可以通过new Map()来创建。它具有set方法用于向集合中添加键值对,get方法用于获取指定键名对应的值,has方法用于判断集合中是否存在某个键名,clear方法用于清空集合。Map的键名可以是任意数据类型,包括引用值,但需要注意的是,引用值作为键名时,需要使用相同的引用地址才能获取到对应的值。\[2\] SetMap都可以使用for...of循环或forEach方法进行遍历。在Set中,forEach的第二个参数是集合的元素,因为Set中不存在下标。而在Map中,forEach的第一个参数是键值对的值,第二个参数是键值对的键名。\[3\] 总结来说,SetMapES6中新增的集合类型,Set用于存储无重复值的集合,Map用于存储键值对的集合。它们提供了一些方法来操作集合,如添加、获取、判断是否存在等。在使用时需要注意它们的特性和方法的使用方式。 #### 引用[.reference_title] - *1* *2* [ES6中的MapSet详解](https://blog.csdn.net/m0_45093055/article/details/126430467)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [ES6中的setmap](https://blog.csdn.net/weixin_44247866/article/details/127561391)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值