You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将对象数组映射为带自定义键的对象?

如何将对象数组映射为带自定义键的对象?

你当前用map方法得到的是字符串数组,但实际需要的是以id为键、name为值的对象。map本身是用来生成新数组的,所以得换用合适的方法实现需求,下面是几种可行方案:

方案一:使用reduce方法(推荐)

这是处理这类数组转对象场景最常用的方式:

const categories = [
  { id: 4, name: "Hotel" },
  { id: 3, name: "Mall" },
  { id: 2, name: "Resort" },
  { id: 1, name: "Restaurant" },
  { id: 5, name: "Staycation" },
  { id: 6, name: "Store" },
];

const result = categories.reduce((acc, category) => {
  acc[category.id] = category.name;
  return acc;
}, {}); // 初始值传入空对象作为累加器

console.log(result);

运行后就能得到你期望的:{ 1: 'Restaurant', 2: 'Resort', 3: 'Mall', 4: 'Hotel', 5: 'Staycation', 6: 'Store' }

方案二:使用Object.fromEntries(ES2019+)

如果你的运行环境支持ES2019及以上,可以用更简洁的写法:

const result = Object.fromEntries(
  categories.map(category => [category.id, category.name])
);

console.log(result);

思路是先用map把每个对象转成[键, 值]格式的数组,再通过Object.fromEntries把二维数组直接转换成对象。

方案三:手动循环遍历

最基础的实现方式,逻辑清晰易懂:

const result = {};
for (const category of categories) {
  result[category.id] = category.name;
}

console.log(result);

为什么原来的代码不符合预期?

map方法的核心作用是将数组的每个元素转换为新值,最终返回一个新数组,所以你之前的代码会把每个对象转成字符串,最终得到字符串数组,而不是目标对象。

内容的提问来源于stack exchange,提问作者Larra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 17:55:14