JS中Map对象与数组的相互转换

一、Map对象转换成数组指定形式

方法 1: 使用 Array.from + 映射函数

直接通过 Array.from 的第二个参数(映射函数)转换:

javascript 复制代码
const map = new Map([['a', 123], ['b', 456]]);

const result = Array.from(map, ([key, value]) => ({
  label: key,
  value: value
}));

console.log(result);
// 输出: [{ label: 'a', value: 123 }, { label: 'b', value: 456 }]

方法 2: 展开运算符 + map

先将 Map 展开为数组,再调用 map 转换:

javascript 复制代码
const map = new Map([['a', 123], ['b', 456]]);

const result = [...map].map(([key, value]) => ({
  label: key,
  value: value
}));

console.log(result);
// 输出: [{ label: 'a', value: 123 }, { label: 'b', value: 456 }]

‌‌方法 3: for...of 循环遍历

通过遍历 Map 手动构建数组:

javascript 复制代码
const map = new Map([['a', 123], ['b', 456]]);
const result = [];

for (const [key, value] of map) {
  result.push({ label: key, value });
}

console.log(result);
// 输出: [{ label: 'a', value: 123 }, { label: 'b', value: 456 }]

方法 4: 使用 reduce 函数

通过 Array.from 或展开运算符配合 reduce

javascript 复制代码
const map = new Map([['a', 123], ['b', 456]]);

const result = [...map].reduce((arr, [key, value]) => {
  arr.push({ label: key, value });
  return arr;
}, []);

console.log(result);
// 输出: [{ label: 'a', value: 123 }, { label: 'b', value: 456 }]

方法 5: 极简箭头函数写法

结合展开运算符和隐式返回:

javascript 复制代码
const map = new Map([['a', 123], ['b', 456]]);
const result = [...map].map(([k, v]) => ({ label: k, value: v }));

console.log(result);
// 输出: [{ label: 'a', value: 123 }, { label: 'b', value: 456 }]

二、数组指定形式转换成Map对象

方法 1: 使用 Array.map()Map 构造函数

直接将数组映射为 [key, value] 格式,传入 Map 构造函数:

javascript 复制代码
const arr = [{ label: 'a', value: 123 }, { label: 'b', value: 456 }];
const map = new Map(arr.map(item => [item.label, item.value]));

// 验证
console.log(map.get('a')); // 123
console.log(map.get('b')); // 456

方法 2: 使用 reduce 遍历构建

通过 reduce 逐项插入到 Map 中:

javascript 复制代码
const arr = [{ label: 'a', value: 123 }, { label: 'b', value: 456 }];
const map = arr.reduce((acc, item) => {
  acc.set(item.label, item.value);
  return acc;
}, new Map());

console.log(map);
// 输出:new Map([["a",123],["b",456]])

方法 3: for...of 循环遍历

显式遍历数组并插入键值对:

javascript 复制代码
const arr = [{ label: 'a', value: 123 }, { label: 'b', value: 456 }];
const map = new Map();
for (const item of arr) {
  map.set(item.label, item.value);
}

console.log(map);
// 输出:new Map([["a",123],["b",456]])

方法 4: 使用 forEach 遍历

利用数组的 forEach 方法:

javascript 复制代码
const arr = [{ label: 'a', value: 123 }, { label: 'b', value: 456 }];
const map = new Map();
arr.forEach(item => map.set(item.label, item.value));

console.log(map);
// 输出:new Map([["a",123],["b",456]])

方法 5: 动态生成键值对(极简箭头函数)

结合解构和隐式返回:

javascript 复制代码
const arr = [{ label: 'a', value: 123 }, { label: 'b', value: 456 }];
const map = new Map(arr.map(({ label, value }) => [label, value]));

console.log(map);
// 输出:new Map([["a",123],["b",456]])
相关推荐
fsssb3 分钟前
Chromium 源码学习笔记(七):那些跨进程的调用,底下都是同一个东西——Mojo
前端
gis开发之家24 分钟前
《Vue3 从入门到大神35篇》Vue3 源码详解(五):effect 依赖收集原理——track 与 trigger 是如何工作的?
javascript·typescript·前端框架·vue3·vue3源码
MichaelJohn36 分钟前
从零星白屏到“启发式缓存”,记录一次刚接手屎山的惊险排查
前端
程序员黑豆1 小时前
鸿蒙应用开发:6种图片加载方式详解
前端·华为·harmonyos
半个落月1 小时前
用 React 搭一个 WebGPU 模型加载页:从状态驱动到可复用进度条
前端·react.js
雪隐1 小时前
个人电脑玩AI-13让5060 Ti给你打工——我用 0.9B 小模型终结了"谁来记会议纪要"这个世纪难题
前端·人工智能·后端
橘子星2 小时前
我一个前端切图仔,凭什么能在浏览器里跑大模型?
前端·javascript·前端框架
70asunflower2 小时前
初学者理解 Web 工作原理(完全教程)
前端
半个落月2 小时前
用 LangChain JS 做可控写作实验:理解温度参数、提示词与异步调用
javascript·人工智能·后端
爱勇宝2 小时前
《道德经》第 7 章:真正厉害的领导者,不抢主角
前端·后端·程序员