Appearance
Set和Map
date: 2020-08-25 16:46:12 tags: [js]
背景
JavaScript的默认对象表示方式 {} 可以视为其他语言中的Map或Dictionary的数据结构,即一组键值对。
但是JavaScript的对象有个小问题,就是键必须是字符串。但实际上Number或者其他数据类型作为键也是非常合理的。为了解决这个问题,最新的ES6规范引入了新的数据类型Map和set.
Set是一种叫做集合的数据结构,Map是一种叫做字典的数据结构
Set
类似于数组,但是成员的值都是唯一的,没有重复的值
基础用法
javascript
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]方法与属性
javascript
const s = new Set([1,2,3,4])
// 属性
// size:返回字典所包含的元素个数
s.size // 4
// 方法
// add(value):添加某个值,返回 Set 结构本身
s.add(5) // Set [1,2,3,4,5 ]
// delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
s.delete(5) // true
// has(value):返回一个布尔值,表示该值是否为 Set 的成员。
s.has(5) // false
// clear():清除所有成员,无返回值。
s.clear()遍历方法
javascript
let set = new Set(['a', 'b', 'c']);
// keys():返回键名的遍历器
set.keys() // SetIterator {"a", "b", "c"}
[...set.keys()] // ["a", "b", "c"]
// values():返回键值的遍历器
set.values() // SetIterator {"a", "b", "c"}
[...set.values()] // ["a", "b", "c"]
// entries():返回键值对的遍历器
set.entries()// SetIterator {"a", "b", "c"}
[...set.entries()] // [["a", "a"], ["b", "b"], ["c", "c"]]
// forEach():使用回调函数遍历每个成员,无返回值Map
它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适;
Map 和 Set区别
- 共同点:集合、字典可以存储不重复的值
- 不同点:集合是以[值,值]的形式存储元素,字典是以[键,值]的形式存储
基础用法
javascript
const m = new Map();
const o = {p: 'Hello World'};
m.set(o, 'content')
m.get(o) // "content"
m.has(o) // true
m.delete(o) // true
m.has(o) // false属性和方法
- size:返回字典所包含的元素个数
- set(key, val): 向字典中添加新元素
- get(key):通过键值查找特定的数值并返回
- has(key):如果键存在字典中返回true,否则false
- delete(key): 通过键值从字典中移除对应的数据
- clear():将这个字典中的所有元素删除
遍历方法
- keys():将字典中包含的所有键名以数组形式返回
- values():将字典中包含的所有数值以数组形式返回
- entries():返回键值对的遍历器
- forEach():遍历字典的所有成员