Set 和 Map 数据结构
2020-03-12 本文已影响0人
简单tao的简单
Set 数据结构
ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
- 类似于数组
- 成员的值是唯一的
-
Set
本身是一个构造函数,用来生成Set
数据结构
new Set([1, 2, 3,4]) //Set {1, 2, 3, 4}
JSON.stringify(new Set([1, 2, 3,4])) // [1,2,3,4]
new Set('aaadfdf') //Set {"a", "d", "f"}
[...new Set('aaadfdf')] //["a", "d", "f"]
Set的用处
- 使用 Set 可以很容易地实现并集(Union)、交集(Intersect)和差集(Difference)
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}
- 数组去重
let arr = [...new Set([1,1,2,3,3,3,4,4])]
//[1, 2, 3, 4]
let arr = Array.from(new Set([1,1,2,3,3,3,4,4])) //Array.from()将一个类数组对象或者可遍历对象转换成一个真正的数组
//[1, 2, 3, 4]
- 字符串去重
let arr = [...new Set('aaadfdf')]
//["a", "d", "f"]
let arr = Array.from(new Set('aaadfdf')) //Array.from()将一个类数组对象或者可遍历对象转换成一个真正的数组
//["a", "d", "f"]
Map数据结构
ES6提供了Map数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。
const m = new Map();
const o = {p: 'Hello World'};
m.set(o, 'content')
console.log(m)
//Map{Object => "content"}
console.log(JSON.stringify(m))
//[[{"p":"Hello World"},"content"]]
Map 也可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组。
const map = new Map([
['name', '张三'],
['title', 'Author']
]);
console.log(map)
//Map{"name" => "张三", "title" => "Author"}
console.log(JSON.stringify(map))
//[["name","张三"],["title","Author"]]
Map的用处
- JavaScript 的对象(Object)只能用字符串当作键,Map 数据结构“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键
- Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应