Map
- Notes: key-value paird,记住插入顺序,任何值可以做key or value.
- 一个key只出现一次,是唯一的;时间复杂度小于O(N)
示例
const map1 = new Map();
map1.set('a', 1);
map1.set('b', 2);
map1.set('c', 3);
for(const key of map1){
console.log(ke) // Array ["a", 1]
}
console.log(map1.get('a')); // 1
map1.set('a', 97);
console.log(map1.get('a')); // 97
console.log(map1.size); // 3
map1.delete('b');
console.log(map1.size); // 2
Map Vs Object
| Map | Object | ||
|---|---|---|---|
| accidental key | 默认不包含任何key,只包含set插入的key | ||
| key TYPES | 任何值(function、objects、promitive) | eithor String or Symbol | |
| key order | insertion order | ||
| size | map.size() | 没有明确定义,可以使用Object.keys().length | |
| performance | 频繁操作性能优越 | 没有优化 | |
| Serialization and parsing | 没有原生支持,可以参考社区提供的序列号方法 How do you JSON.stringify an ES6 Map? | 原生支持 JSON.parse JSON.stringify |
Map.prototype[@@toStringTag]
class ValidatorClass {
get [Symbol.toStringTag]() {
return 'Validator';
}
}
console.log(Object.prototype.toString.call(new ValidatorClass()));
Object.prototype.toString.call(new Map()) // '[object Map]'
实力方法
Map.prototype.clear()Map.prototype.delete()Map.prototype.get()Map.prototype.set()Map.prototype.has()Map.prototype[@@iterator]()Map.prototype.entries()同@@iteratorMap.prototype.keys()Map.prototype.values()Map.prototype.forEach()
详情见MDN - Map
Set
- 存储任何类型的唯一值
- 相同值只存储一次,插入顺序,时间复杂度好于O(N)
- has 方法的性能好于arr.includes()的。
Set没有set,get方法,新增了add方法。
1. Set.prototype.keys()与 Set.prototype.values()相同。
-
Set.prototype.entries() 返回包含 **
[value, value]**的遍历对象。