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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值