Map和Set

166 阅读2分钟

map

Map 是一种新的集合类型,Map 的大多数特性都可以通过 Object 类型实现

使用 new 关键字和 Map 构造函数可以创建一个空映射:

const m = new Map();

可迭代对象中的每个键/值对都会按照迭代顺序插入到新映射实例中:

// 使用嵌套数组初始化映射
const num1 = new Map([
    ["key1", "val1"],
    ["key2", "val2"],
    ["key3", "val3"]
]);
console.log(num1.size); // 3
// 使用自定义迭代器初始化映射
const num2 = new Map({
    [Symbol.iterator]: function*() {
        yield ["key1", "val1"];
        yield ["key2", "val2"];
        yield ["key3", "val3"];
    }
});
console.log(num2.size); // 3
// 映射期待的键/值对
const num3 = new Map([[]]);
console.log(num3.has(undefined)); // true
console.log(num3.get(undefined)); // undefined

初始化之后,可以使用 set()方法再添加键/值对。另外,可以使用 get()和 has()进行查询,可以通过 size 属性获取映射中的键/值对的数量,还可以使用 delete()和 clear()删除值。

const num = new Map();
console.log(num.has("firstName")); // false
console.log(num.get("firstName")); // undefined
console.log(num.size); // 0
num.clear(); // 清除这个映射实例中的所有键/值对
console.log(num.has("firstName")); // false
console.log(num.has("lastName")); // false
console.log(num.size); // 0

Map 可以使用任何 JavaScript 数据类型作为键,Map 内部使用 SameValueZero 比较操作。

const num = new Map();
const functionKey = function() {};
const symbolKey = Symbol();
const objectKey = new Object();
num.set(functionKey, "1");
num.set(symbolKey, "2");
num.set(objectKey, "3");
console.log(num.get(functionKey)); // 1
console.log(num.get(symbolKey)); // 2
console.log(num.get(objectKey)); // 3

set

使用 new 关键字和 Set 构造函数可以创建一个空集合:const num = new Set()

创建并初始化实例,则可以给 Set 构造函数传入一个可迭代对象

// 使用数组初始化集合 const num1 = new Set(["1", "2", "3"]); 
console.log(num1.size); // 3 
// 使用自定义迭代器初始化集合 
const num2 = new Set({ 
    [Symbol.iterator]: function*() { 
        yield "1"; 
        yield "2";
        yield "3"; 
    } 
}); 
console.log(num2.size); // 3

初始化之后,可以使用 add()增加值,使用 has()查询,使用 delete() 和 clear()删除元素

const num = new Set(); 
console.log(num.has("1")); // false 
console.log(num.size); // 0 
num.add("1") 
    .add("2"); 
console.log(num.has("1")); // true 
console.log(num.size); // 2 
num.delete("1"); 
console.log(num.has("1")); // false 
console.log(num.has("2")); // true 
console.log(num.size); // 1 
num.clear(); // 销毁集合实例中的所有值 
console.log(num.has("1")); // false 
console.log(num.has("2")); // false 
console.log(num.size); // 0

Set 可以包含任何 JavaScript 数据类型作为值。

const num = new Set(); 
const symbolVal = Symbol();  
num.add(symbolVal);  
console.log(num.has(symbolVal)); // true