返回首页

关于Map和Set🧐

布莱克2025-11-28 16:36已编辑
Tip:文章封面与内容无关,作者旅游时拍摄,因为没什么值得把四季都错过!

Map和Set的那些事

## 最近做题的时候会经常用到map和set,在此详细记录一下

Set

  • 存储唯一值的集合
  • 值的顺序等于插入顺序
  • NaN 与 NaN 相等,+0 和 -0 相等

构造函数

// 创建空Set
const set = new Set();

// 从可迭代对象创建
const set2 = new Set([1, 2, 3, 2, 1]); // Set(3) {1, 2, 3}
const set3 = new Set('hello'); // Set(4) {'h', 'e', 'l', 'o'}

实例方法

添加元素 - set.add()

检查存在 - set.has()

删除元素 - set.delete()

清空集合 - set.clear()

获取大小 - set.size()

遍历方法 - forEach,keys() / values() 相同

// keys() 和 values() 相同
for (let key of set.keys()) {
  console.log(key); // 'a', 'b', 'c'
}

for (let value of set.values()) {
  console.log(value); // 'a', 'b', 'c'
}

应用:数组去重

const arr = [1, 1, 2, 2, 2, 3, 4, 5]
const uniqueArr = [...new Set(arr)]
1. 添加元素 - add()
const set = new Set();
set.add(1);
set.add(2);
set.add(2); // 重复,不会被添加
set.add('text');
set.add({ name: 'obj' });
console.log(set); // Set(5) {1, 2, 'text', {name: 'obj'}}
2. 检查存在 - has()
const set = new Set([1, 2, 3, {a: 1}]);
console.log(set.has(1)); // true
console.log(set.has(4)); // false
console.log(set.has({a: 1})); // false - 不同引用
3. 删除元素 - delete()
const set = new Set([1, 2, 3, 4]);
set.delete(2);
console.log(set); // Set(3) {1, 3, 4}

console.log(set.delete(5)); // false - 元素不存在
4. 清空集合 - clear()
const set = new Set([1, 2, 3]);
set.clear();
console.log(set); // Set(0) {}
5. 获取大小 - size
const set = new Set([1, 2, 2, 3, 3, 3]);
console.log(set.size); // 3

Map (映射)

  • 键值对的集合
  • 键可以是任意类型(对象、函数等)
  • 保持插入顺序
  • 性能优于普通Object(频繁增删时)

构造函数

// 创建空Map
const map1 = new Map();

// 从二维数组创建
const map2 = new Map([
  ['name', 'John'],
  [1, 'number key'],
  [{}, 'object key']
]);

// 从Object创建
const obj = {a: 1, b: 2};
const map3 = new Map(Object.entries(obj));

实例方法

设置键值 map.set()

获取值 map.get()

检查键 map.has()

删除键 map.delete()

清空 map.clear()

获取大小 map.size()

遍历方法

// for of
for (let [key, value] of map) {
  console.log(key, value);
}
// forEach
map.forEach((value, key) => {
  console.log(`${key}: ${value}`);
});

// keys()
for (let key of map.keys()) {
  console.log(key); // 'name', 'age', 'city'
}

// values()
for (let value of map.values()) {
  console.log(value); // 'John', 30, 'New York'
}
1.设置键值 - set()
const map = new Map();

// 各种类型的键
map.set('string', 'value1');
map.set(123, 'value2');
map.set({key: 'obj'}, 'value3');
2. 获取值 - get()
const map = new Map();
map.set('name', 'Alice');
map.set({id: 1}, 'user');

console.log(map.get('name')); // 'Alice'
console.log(map.get({id: 1})); // undefined - 不同引用

const keyObj = {id: 1};
map.set(keyObj, 'user');
console.log(map.get(keyObj)); // 'user' - 相同引用
3. 检查键 - has()
const map = new Map();
map.set('active', true);

console.log(map.has('active')); // true
console.log(map.has('inactive')); // false
4. 删除键 - delete()
const map = new Map([['a', 1], ['b', 2]]);
map.clear();
console.log(map.size); // 0


assistant