首页 > 解决方案 > 使用reduce获取带有对象的对象

问题描述

我有以下形式的数组:

[
{key: "key1", value: value1}
{key: "key2", value: value2}
{key: "key3", value: value3}
...
]

我需要转换为以下形式:

{ { key1 : value1},  { key2 : value2},  { key3 : value3} } 

如何用reduce()做到这一点?

我正在尝试使用此代码:

 var someObject = this.someArray.reduce(function(acc, item) {
            return { [item.key]: item.value};
        }, {});

但我总是只得到最后一项而不是全部。

标签: javascripttypescriptjavascript-objectsreduce

解决方案


问题在于你的回报

return acc + { [item.key]: item.value};

您不能对对象使用+运算符。add尝试以下操作:

acc[item.key] = item.value;
return acc

这假设您keys都是独一无二的。请参阅下面的完整示例:

let x = [{
    key: "key1",
    value: 'value1'
  },
  {
    key: "key2",
    value: 'value2'
  },
  {
    key: "key3",
    value: 'value3'
  },
].reduce((accumulatedValue, curentValue) => {
  accumulatedValue[curentValue.key] = curentValue.value;
  return accumulatedValue
}, {})
console.log(x);


推荐阅读