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

如何将对象数组转换为以元素id为键的嵌套对象结构?

嘿,这个转换需求我之前做项目时也遇到过,用JS原生的几个方法就能轻松搞定,给你两种实用的方案:

方法1:用Array.reduce()(兼容性拉满)

这是最稳妥的方案,几乎所有现代浏览器都支持,甚至能兼容一些旧版本环境:

const originalArray = [{id:1}, {id:2}];
const transformedObject = originalArray.reduce((accumulator, currentItem) => {
  // 把当前元素的id作为键,元素本身作为值存入累加器对象
  accumulator[currentItem.id] = currentItem;
  return accumulator;
}, {}); // 初始值是空对象

console.log(transformedObject);
// 输出:{"1": { id: 1 }, "2": { id: 2 }}

原理很简单:reduce会遍历数组,每次把当前元素的id作为键,把元素本身挂载到累加器对象上,最后返回的累加器就是我们想要的结构。

方法2:用Object.fromEntries()(ES2019+,更简洁)

如果你的项目环境支持ES2019及以上(比如现代浏览器、Node.js 12+),这个方法会更简洁直观:

const originalArray = [{id:1}, {id:2}];
const transformedObject = Object.fromEntries(
  originalArray.map(item => [item.id, item])
);

console.log(transformedObject);
// 输出:{"1": { id: 1 }, "2": { id: 2 }}

这里先通过map把每个数组元素转换成[键, 值]的二维数组格式,再用Object.fromEntries直接把这个二维数组转成目标对象,一步到位,代码看起来更清爽。

小提示

因为JavaScript对象的键只能是字符串或Symbol类型,所以即使你的id是数字,转换后也会自动变成字符串形式的键,正好符合你需要的"1"、"2"这种格式,完全不用额外处理~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:02:15