ES6 Map和Set的用法笔记

640?wx_fmt=jpeg

一、Map

1、概念:Map用来保存键值对,类似于字典类型。任意值(对象或者原始值)都可以作为一个键或者一个值。

2、Maps 和 Objects 用法比较

Object对象的键只能是字符串或者 Symbols类型,但Map对象的键可以是任意值。

Map 中的键值是有序的(FIFO 原则),而添加到Object中的键则不是。

Map 的键值对个数可以根据 size 属性获取,而 Object 的键值对个数只能手动计算。

Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突。

3、用法示例

3.1定义

var map= new Map();

myMap.set(name, "小明"); //键值是字符串

myMap.get(name);    // 小明

var map= new Map();

var keyobj={};

map.set(keyobj, "小明"); //键值是对象

map.get(keyobj);    // 小明

var map= new Map(); //键值是函数

var keyfunc=function() {};

map.set(keyfunc, "小明");

map.get(keyfunc);    // 小明

var map= new Map(); //键值是NaN

map.set(NaN, "小明");

map.get(NaN);    // 小明

3.2 遍历用法

var map = new Map();

map.set(0, "小明");

map.set(1, "小王");

//for...of

for (var [key, value] of myMap) {

 console.log(key + " = " + value);

}

// forEach()

myMap.forEach(function(value, key) {

console.log(key + " : " + value);

}, myMap)

3.3 Map对象操作

var arr = [["name", "小明"], ["age", 50]];

var map = new Map(arr);

        // Map 构造函数可以将一个 二维 键值对数组转换成

        一个 Map 对象

var outArray = Array.from(map);// 使用 Array.from 函数可以将一个 Map 对象转换成一个二维键值对数组

var map2=new Map(map);//Map拷贝功能

var map3=new Map([map,map2]);//合并两个 Map 对象时,如果有重复的键值,则后面的会覆盖前面的

console.log(map);

二、Set对象

1、概念:Set对象用来存储任意类型的唯一值。

特殊情况:

1、+0 与 -0 在存储判断唯一性的时候是恒等的,所以不重复;

2、undefined 与 undefined 是恒等的,所以不重复。

3、NaN 与 NaN 是不恒等的,但是在 Set 中只能存一个。

2、用法示例

   let mySet = new Set();

mySet.add(1);

mySet.add(5);

mySet.add(5);

mySet.add("some text");

console.log(mySet);

var mySet = new Set(["小明", "小王", "小张"]); //数组转set

var mySet = new Set('小明');//字符串转set

var mySet = new Set([1, 2, 3, 4, 4]);// [1, 2, 3, 4]

//并集

var a = new Set([1, 2, 3]);

var b = new Set([4, 3, 2]);

var union = new Set([...a, ...b]); // {1, 2, 3, 4}

//交集

var a = new Set([1, 2, 3]);

var b = new Set([4, 3, 2]);

var intersect = new Set([...a].filter(x => b.has(x))); // {2, 3}

// 差集

var a = new Set([1, 2, 3]);

var b = new Set([4, 3, 2]);

var difference = new Set([...a].filter(x => !b.has(x))); // {1}

原文地址:https://www.cnblogs.com/hgmyz/p/12350951.html