ES6之Set 与Map的数组操作

一、Set的特性

它类似于数组,但是成员的值都是唯一的,没有重复的值。

let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);

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

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

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

2、Map的特性

它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。

const map = new Map([
  [1, 'one'],
  [2, 'two'],
  [3, 'three'],
]);

[...map.keys()];
// [1, 2, 3]

[...map.values()];
// ['one', 'two', 'three']

[...map.entries()];
// [[1,'one'], [2, 'two'], [3, 'three']]

[...map];
// [[1,'one'], [2, 'two'], [3, 'three']]

Map在调用拓展运算符时,会调用iterator接口,并且返回数组;另外在应用for…of 语句时也会调用iterator接口时,也是返回数组,因此解构赋值需使用下文结构。

let map = new Map([[1, 2], [2, 3]])
for (let [key, value] of map) {
    ...
}

可以对Map结构进行筛选,通过数组的fetch和map方法,Map实例并没有该方法

const map0 = new Map()
  .set(1, 'a')
  .set(2, 'b')
  .set(3, 'c');

const map1 = new Map(
  [...map0].filter(([k, v]) => k < 3)
);
// 产生 Map 结构 {1 => 'a', 2 => 'b'}

const map2 = new Map(
  [...map0].map(([k, v]) => [k * 2, '_' + v])
    );
// 产生 Map 结构 {2 => '_a', 4 => '_b', 6 => '_c'}

猜你喜欢

转载自blog.csdn.net/qq_36470086/article/details/82393413