参考文献 ES6的Set和Map数据结构,由你制造
Map和Set是ES6规范引入的新特性作为新的内置对象,这次在项目中刚好使用了Set数据结构,就整理关于这两个新特性的知识。
Map的主要应用场景是数据存储,而Set的主要作用是数组的去重。
Set是一种叫做集合的数据结构,Map是一种叫做字典的数据结构
Map
Map 对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始值) 都可以作为一个键或一个值。具有极快的查找速度。(Map对象是键值唯一不重复)
Map的主要作用就是用来存储数据的,相对于object只提供“字符串-值”的对应,Map提供了“值-值”的对应。
Map的基本使用方法:
const m = new Map();
const o = {p: 'test1'};
m.set(o, 'content');
m.get(o) // 'content'
m.has(o) // true
m.delete(o)
m.has(o) // false
1.构造函数
Map()
2.属性
Map.prototype.size 返回Map对象的键/值对的数量。
3.方法
set(key, val): 向字典中添加新元素
get(key):通过键值查找特定的数值并返回
has(key):如果键存在字典中返回true,否则false
delete(key): 通过键值从字典中移除对应的数据
clear():将这个字典中的所有元素删除
4.使用 for..of 方法迭代 Map
let myMap = new Map();
myMap.set(0, 'zero');
myMap.set(1, 'one');
for(let [key, value] of myMap) {
console.log(key + "=" + value);
}
// 两个log "0=zero" "1=one"
for (let key of myMap.keys()) {
console.log(key)
} 0, 1 两个log
5.使用 forEach() 方法迭代 Map
myMap.forEach(function(value, key) {
console.log(key + " = " + value);
})
// 将会显示两个logs。 一个是 "0 = zero" 另一个是 "1 = one"
6.Map 与数组的关系
- 一个二维键值对数组可以通过Map构造函数转成一个Map对象
一个Map对象可通过Array.from函数转换成一个二维键值对数组、或者使用展开运算符转换成一个二维数组
let kvArray = [["key1", "value1"], ["key2", "value2"]]; let myMap = new Map(kvArray); myMap.get("key1"); // 返回值为 "value1" console.log(Array.from(myMap)); // 输出和kvArray相同的数组 console.log([...myMap]); // 输出和kvArray相同的数组
Set
Set是一种集合的数据结构,集合具有 无序 且 唯一的特点,因此Set类似数组,但是其中没有重复的值。
Set的基本用法:
const s = new Set();
[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));
for (let i of s) {
console.log(i); // 2 3 5 4
}
// 去除数组的重复成员
let array = [1,2,1,4,5,3];
[...new Set(array)] // [1, 2, 4, 5, 3]
1.构造函数
new Set()
2.属性
size:返回集合所包含元素的数量
3.操作方法
add(value):向集合添加一个新的项
delete(value):从集合中移除一个值
has(value):如果值在集合中存在,返回true,否则false
clear(): 移除集合里所有的项
4.遍历方法
keys():返回一个包含集合中所有键的数组
values():返回一个包含集合中所有值的数组
entries:返回一个包含集合中所有键值对的数组(感觉没什么用就不实现了)
forEach():用于对集合成员执行某种操作,没有返回值
5.应用
Set的主要作用是实现数组的去重
let myArray = ["val1", "val2", "val3"];
// 用Set构造器可以将数组Array转换成Set
let mySet = new Set(myArray);
mySet.has("val1") // true
//用...(展开操作符)可以将Set转换成Array
console.log([...mySet]) // 与myArray完全一致
//数组去重
const numbers = [2,3,4,4,2,3,3,4,4,5,5,6,6,7,5,32,3,4,5]
console.log([...new Set(numbers)])
// [2, 3, 4, 5, 6, 7, 32]