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中的Map和Set

JS中的数据类型,包含ES6,set和map等等

JS中的Set,Map,Array查询速度比较:Set;Map;Array

Discord.js:commands.map 不是 ApplicationCommandManager.set 中的函数

Java中的Set,List,Map的区别

js的Set和Map集合