es6 学习笔记 Set 和Map数据结构

Set

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

const items = new Set([1, 2, 3, 4, 5, 5, 5, 5]);
items  // Set(5) {1, 2, 3, 4, 5}
[...items] // [1,2,3,4,5]

Set实例的属性

Set.prototype.constructor:构造函数,默认就是Set函数。
Set.prototype.size:返回Set实例的成员总数。

Set实例的方法

add(value):添加某个值,返回 Set 结构本身。
delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
has(value):返回一个布尔值,表示该值是否为Set的成员。
clear():清除所有成员,没有返回值。

转换 Set结构转数组

const items = new Set([1, 2, 3, 4, 5]);
const array = Array.from(items);

遍历操作

keys():返回键名的遍历器 (Set结构键名、键值一样)
values():返回键值的遍历器
entries():返回键值对的遍历器
forEach():使用回调函数遍历每个成员

用途:
1.对数组去重;
2.为2个数组,实现并集,交集,差集;

Map

定义:类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。
Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。

// 作为构造函数,Map 也可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组。 
const map11 = new Map([
  ['F', 'no'],
  ['T',  'yes'],
]);
map11   // Map(2) {"F" => "no", "T" => "yes"}

let map = new Map();
map.set('foo', true);
map.set('bar', false);
map   // map(2) {"foo" => true, "bar" => false}

Map 的键实际上是跟内存地址绑定的,只要内存地址不一样,就视为两个键。这就解决了同名属性碰撞(clash)的问题,我们扩展别人的库的时候,如果使用对象作为键名,就不用担心自己的属性与原作者的属性同名。
即:基本数据类型的键同名,为一个键;引用的则不是类型

Map实例的属性

Set.prototype.constructor:构造函数,默认就是Set函数。
Set.prototype.size:返回Map实例的成员总数。

Map实例的方法

set(key, value): 设置键名key对应的键值为value,然后返回整个 Map 结构
get(key): get方法读取key对应的键值,如果找不到key,返回undefined。
delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
has(value):返回一个布尔值,表示该值是否在Map对象中。
clear():清除所有成员,没有返回值。

遍历方法

Map 结构原生提供三个遍历器生成函数和一个遍历方法。

keys():返回键名的遍历器。
values():返回键值的遍历器。
entries():返回所有成员的遍历器。
forEach():遍历 Map 的所有成员。

转换

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']]

Array-->Map:将数组传入 Map 构造函数,就可以转为 Map。

new Map(arry);

Map-->对象:方法:遍历map,对空对象逐一添加

对象-->Map:方法:遍历对象,对空map逐一添加
Map-->JSON 分为转对象JSON 还是数组JSON。方法:先转成对象,在JSON.sringify();
JSON-->Map 方法:JSON-->Object--->Map或 JSON-->Array-->Map

其他

Map和Set 均可以结合数组的map()和filter()方法。

相关推荐