Map、Set(ES6)

Map、Set(ES6)

Map对象

1.Map对象保存键值对,任何值(对象或者原始值)都可以作为一个键或一个值。
map与array的转换

var arr = [[1,2],[3,4]];
var myMap = new Map(arr);
console.log(myMap);  //此时二维数组会被转换成一个map对象 
var arr1 = Array.from(myMap); //此时map对象会转换为二维数组 [[1,2],[3,4]]

myMap的结果为:
在这里插入图片描述
如图可以看出,map对象与object对象的区别,多了一个size属性,说明Map对象键值对个数可以通size属性获取,而object对象则要手动计算

Map克隆

var myMap = new Map([[1,'one'],[2,'two']]);
var myMap1 = new Map(myMap);
console.log(myMap === myMap1); //false 说明Map对象构造生成实例,迭代出新的对象

Map合并

var arr1 = [[1,'one'],[2,'two'],[3,'three'],[4,'four']];
var arr2 = [[1,'aaa'],[2,'bbb']];
var arr = new Map([...arr1, ...arr2]);  //发现重复键值对应的值会被替换覆盖

打印结果为:
在这里插入图片描述

Set对象

set对象允许存储任何类型的唯一值,无论是原始值或是对象引用

let mySet = new Set();
mySet.add(1); // Set(1) {1}
mySet.add(2); // Set(2) {1,2}
mySet.add(2); // Set(2) {1,2} 体现Set对像的唯一性
var obj = {a:1, b:2};
mySet.add(obj); // Set(3) {1,2,{...}}
mySet.add({a:1, b:2}); // Set(3) {1,2,{...},{...}} //说明对象间的引用不同不恒等,即便值相同,Set也能存储

类型转换

var mySet = new Set(['aa','bb','cc']); //Array转Set
mySet.toString(); // Set(3) 说明Set对象是不能通过toString来转成字符串的
var myArray = [...mySet]; //Set转Array
var mySet = new Set('hello'); // Set(4) {'h','e','l','o'}

数组去重

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

并集

var arr1 = new Set([1,2,4,5]);
var arr2 = new Set([2,3,4,5]);
var arr = new Set([...arr1, ...arr2]);  //{1,2,3,4,5}

交集

var arr1 = new Set([1,2,3,4,5]);
var arr2 = new Set([2,4,5]);
var union = new Set([...arr1].filter(x => arr2.has(x)));  // {2,4,5}

差集

var arr1 = new Set([1,2,4]);
var arr2 = new Set([2,3,5]);
var differ = new Set([...arr1].filter(x => !arr2.has(x))); //{1,4}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值