Map对象和Set对象
Map 对象
Map
对象就是一个简单的键/值对映射集合,可以按照数据插入时的顺序遍历所有的元素。
下面的代码演示了使用 Map
进行的一些基本操作。请参考 Map
以获取更多的样例和完整的 API。你可以使用 for...of
循环来在每一次迭代中得到 [key, value]
数组。
const sayings = new Map();
sayings.set("dog", "woof");
sayings.set("cat", "meow");
sayings.set("elephant", "toot");
sayings.size; // 3
sayings.get("dog"); // woof
sayings.get("fox"); // undefined
sayings.has("bird"); // false
sayings.delete("dog");
sayings.has("dog"); // false
for (const [key, value] of sayings) {
console.log(`${key} goes ${value}`);
}
// "cat goes meow"
// "elephant goes toot"
sayings.clear();
sayings.size; // 0
## Set 对象
Set
对象是一组唯一值的集合,可以按照添加顺序来遍历。Set
中的值只能出现一次;它在集合 Set
中是唯一的。
以下代码演示了 Set
的基本操作,更多示例和完整 API 可以参考 Set
。
const mySet = new Set();
mySet.add(1);
mySet.add("some text");
mySet.add("foo");
mySet.has(1); // true
mySet.delete("foo");
mySet.size; // 2
for (const item of mySet) {
console.log(item);
}
// 1
// "some text"
数组和 Set 之间的转换
可以使用 Array.from
或展开语法来完成集合到数组的转换。同样,Set
的构造函数接受数组作为参数,可以完成从 Array
到 Set
的转换。
Array.from(mySet);
[...mySet2];
mySet2 = new Set([1, 2, 3, 4]);
数组和 Set 的对比
一般情况下,在 JavaScript 中使用数组来存储一组元素,而新的 Set
对象有这些优势:
- 根据值(
arr.splice(arr.indexOf(val), 1)
)删除数组元素效率低下。 Set
对象允许根据值删除元素,而数组中必须使用基于元素下标的splice
方法。- 数组的
indexOf
方法无法找到NaN
值。 Set
对象存储唯一值,所以不需要手动处理包含重复值的情况。