js中的Set和Map
Posted 奥特曼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js中的Set和Map相关的知识,希望对你有一定的参考价值。
首先,我们先要知道Set和Map是个什么数据类型。控制台打印。
顾名思义,是一个构造函数,所以我们就可以使用new关键字来创建出Set和Map对象。
一、Set
Set 构造函数能让你创建 Set
对象,其可以存储任意类型的唯一值,无论是基本类型或者对象引用。
使用方式
const set1 = new Set([1, 2, 3, 4, 5]); //Set(5) 1, 2, 3, 4, 5
(1)唯一值
const set1 = new Set([1, 2, 3, 1, 2]);
输出结果:Set(3) 1, 2, 3
任意类型:
let obj = a:1
const set1 = new Set([1,obj,obj,NaN,NaN]);
输出结果:Set(3) 1, a:1, NaN
(2)has()
返回一个布尔值,表示该值在 Set
中存在与否。
const set1 = new Set([1, 2, 3, 4, 5]);
console.log(set1.has(1),set1.has(6));
输出结果:true false
(3)add()
在Set
对象尾部添加一个元素。返回该 Set
对象。
const set1 = new Set([1, 2, 3, 4, 5]);
set1.add(6)
输出结果:Set(6) 1, 2, 3, 4, 5, 6
(4)delete()
const set1 = new Set([1, 2, 3, 4, 5]);
set1.delete(1)
输出结果:true
Array.from(mySet)
数组相关:
let myArray = ["value1", "value2", "value3","value1"];
// 用 Set 构造器将 Array 转换为 Set
let mySet = new Set(myArray);
输出结果:Set(3) 'value1', 'value2', 'value3'
也可以使用展开运算符转成数组
console.log([...mySet]); // 与 myArray 完全一致
同样也可以使用Array.from
Array.from(mySet)
经典案例 数组去重
const numbers = [2,3,4,4,2,3,3,4,4,5,5,6,6,7,5,32,3,4,5]
console.log([...new Set(numbers)])
// [2, 3, 4, 5, 6, 7, 32]
二、Map
Map
对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者基本类型)都可以作为一个键或一个值。类似于对象。
const map1 = new Map();
map1.set('a', 1);
map1.set('b', 2);
console.log(map1.get('a'));
输出结果:1
(1)初始化数据
Map
对象是键值对的集合。Map
中的一个键只能出现一次;它在 Map
的集合中是独一无二的。Map
对象按键值对迭代——一个 for...of 循环在每次迭代后会返回一个形式为 [key,value]
的数组。迭代按插入顺序进行,即键值对按 set() 方法首次插入到集合中的顺序(也就是说,当调用 set()
时,map 中没有具有相同值的键)进行迭代。
const first = new Map([
[1, 'one'],
[2, 'two'],
[3, 'three'],
]);
const second = new Map([
[1, 'uno'],
[2, 'dos']
]);
const merged = new Map([...first, ...second]);
console.log(merged.get(1)); // uno
console.log(merged.get(2)); // dos
console.log(merged.get(3)); // three
合并两个 Map 对象时,如果有重复的键值,则后面的会覆盖前面的。展开语法本质上是将 Map 对象转换成数组。
(2)size
const map1 = new Map([[1,'one']]);
map1.size
输出结果:1
(3)唯一键
let obj = name:'奥特曼'
const map1 = new Map();
map1.set('a', 1);
map1.set('b', 2);
map1.set('a', 2);
map1.set(obj, 2);
map1.set(obj, 3);
如果是基本类型会去判断键是否一致 ,如果是复杂数据类型会去判断引用地址是否一致
输出结果:
以上是关于js中的Set和Map的主要内容,如果未能解决你的问题,请参考以下文章
JS中的Set,Map,Array查询速度比较:Set;Map;Array
Discord.js:commands.map 不是 ApplicationCommandManager.set 中的函数