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

如何将对象数组转换为以existing_value为键的目标对象?

问题:将对象数组转换为键值对对象

原始对象数组

const values = [{
    existing_value: 'Headline 56',
    new_value: 'Headline_new56',
  },
  {
    existing_value: 'Headline 59',
    new_value: 'Headline_new59',
  },
]

期望转换结果

const newObject = { "Headline 56": "Headline_new56",  "Headline 59": "Headline_new59"}

尝试的错误写法

const newObject = {}

const testvalues = values.map(obj => Object.assign( newObject, obj.existing_value: obj.new_value)) 

错误原因

这段代码有两个问题:一是Object.assign的第二个参数不能直接写obj.existing_value: obj.new_value,必须用对象字面量形式;二是map方法的作用是生成新数组,这里我们的目标是构建单个对象,用map会生成无用的数组,完全没必要。

正确实现方式

方法1:用Array.reduce(最推荐)

reduce可以直接遍历数组并累积出目标对象,代码简洁高效:

const newObject = values.reduce((acc, curr) => {
  acc[curr.existing_value] = curr.new_value;
  return acc;
}, {});

方法2:用forEach循环赋值

如果觉得reduce不好理解,用forEach遍历数组逐个添加键值对也很直观:

const newObject = {};
values.forEach(obj => {
  newObject[obj.existing_value] = obj.new_value;
});

方法3:修正Object.assign的写法

如果一定要用Object.assign,需要把第二个参数改成带计算属性名的对象,同时用forEach代替map:

const newObject = {};
values.forEach(obj => {
  Object.assign(newObject, { [obj.existing_value]: obj.new_value });
});

这里的[obj.existing_value]是计算属性名语法,能把变量值作为对象的键名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:21:24