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

如何用JavaScript简化数组结构?将对象数组转为键值对对象

问题分析与解决

你的代码得到[undefined, undefined]的原因有两个:

  1. 使用map时,回调函数用大括号{}包裹逻辑但没有显式return值,默认返回undefined,所以最终数组全是undefined
  2. 逻辑方向错误:修改item.name = item.quantity只是修改原对象的属性,完全没构建出你想要的键值对结构

另外注意:原数组里的orange、apple属于字符串,必须加单/双引号,否则会被当作未定义变量引发报错。

正确解法

方法1:使用reduce(推荐,适合处理大量元素)

// 修正后的原数组(字符串补全引号)
const originalArray = [{name: 'orange', quantity: 1}, {name: 'apple', quantity: 3}];

// 用reduce合并成目标对象,再包裹进数组
const result = [originalArray.reduce((acc, current) => {
  acc[current.name] = current.quantity;
  return acc;
}, {})];

console.log(result); // 输出:[{orange: 1, apple: 3}]

reduce会遍历数组,以空对象{}作为初始累加器,每次把当前元素的name作为键、quantity作为值添加到累加器,最终得到合并后的对象,再放进数组就符合你的期望。

方法2:使用Object.fromEntries(写法更简洁)

const originalArray = [{name: 'orange', quantity: 1}, {name: 'apple', quantity: 3}];

// 先把每个元素转成[name, quantity]的键值对数组,再转成对象
const result = [Object.fromEntries(originalArray.map(item => [item.name, item.quantity]))];

console.log(result); // 输出:[{orange: 1, apple: 3}]

map先把每个对象转换成[键, 值]的格式,Object.fromEntries再把这个二维数组直接转换成目标对象,最后包裹进数组即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:00:04