JS 中 Map 的概念与使用

📚 JS 中 Map 的概念与使用

一、Map 是什么?

  • MapES6 新增的一种键值对集合

  • 与普通对象 {} 不同,Map 的键可以是任何类型(不仅限于字符串或符号)。

  • 保持插入顺序,即按照添加顺序进行迭代。

✅ 特点总结:

  • 键可以是任意数据类型

  • 有序存储

  • 更快的查找性能

  • 常用方法丰富


二、Map 的基本用法

1. 创建 Map

js 复制代码
const map = new Map();

也可以直接初始化:

js 复制代码
const map = new Map([
  ['name', 'Tom'],
  ['age', 25],
]);

2. 常用方法

方法 作用 示例
set(key, value) 添加或更新键值对 map.set('color', 'blue')
get(key) 根据 key 获取对应的 value map.get('color') // 'blue'
has(key) 判断是否存在某个 key map.has('color') // true
delete(key) 删除指定 key map.delete('color')
clear() 清空所有键值对 map.clear()
size 返回 Map 中元素数量 map.size

3. 遍历 Map

js 复制代码
const map = new Map([
  ['a', 1],
  ['b', 2],
  ['c', 3],
]);

// 遍历 key
for (let key of map.keys()) {
  console.log(key);
}

// 遍历 value
for (let value of map.values()) {
  console.log(value);
}

// 遍历 [key, value]
for (let [key, value] of map.entries()) {
  console.log(key, value);
}

// 或直接用 forEach
map.forEach((value, key) => {
  console.log(key, value);
});

三、Map 和 Object 的区别

对比点 Map Object
键的数据类型 任意类型 字符串或 Symbol
键值对的顺序 有序 无序(部分浏览器顺序不保证)
性能 大量增删操作更优 小量数据简单使用
自带方法 丰富(size, set, get, delete) 基本只有原型链方法

简单理解:

  • 少量简单数据,选 Object

  • 需要复杂操作、顺序、任意类型 key,选 Map


四、常见场景举例

1. 统计元素出现次数

js 复制代码
function countElements(arr) {
  const map = new Map();
  for (const item of arr) {
    map.set(item, (map.get(item) || 0) + 1);
  }
  return map;
}

console.log(countElements(['a', 'b', 'a', 'c', 'b', 'a']));

2. 两数之和题(LeetCode)

js 复制代码
function twoSum(nums, target) {
  const map = new Map();
  for (let i = 0; i < nums.length; i++) {
    const complement = target - nums[i];
    if (map.has(complement)) {
      return [map.get(complement), i];
    }
    map.set(nums[i], i);
  }
}

✅ 小总结

  • Map 是一种更灵活、功能更强的键值对集合

  • 键可以是任意类型,且元素有序

  • 适合频繁增删查操作、复杂数据结构场景

相关推荐
RadiumAg1 小时前
记一道有趣的面试题
前端·javascript
yangzhi_emo1 小时前
ES6笔记2
开发语言·前端·javascript
yanlele1 小时前
我用爬虫抓取了 25 年 5 月掘金热门面试文章
前端·javascript·面试
中微子2 小时前
React状态管理最佳实践
前端
烛阴3 小时前
void 0 的奥秘:解锁 JavaScript 中 undefined 的正确打开方式
前端·javascript
中微子3 小时前
JavaScript 事件与 React 合成事件完全指南:从入门到精通
前端
Hexene...3 小时前
【前端Vue】如何实现echarts图表根据父元素宽度自适应大小
前端·vue.js·echarts
初遇你时动了情3 小时前
腾讯地图 vue3 使用 封装 地图组件
javascript·vue.js·腾讯地图
dssxyz3 小时前
uniapp打包微信小程序主包过大问题_uniapp 微信小程序时主包太大和vendor.js过大
javascript·微信小程序·uni-app
天天扭码3 小时前
《很全面的前端面试题》——HTML篇
前端·面试·html