使用reduce来获得带有对象的对象

问题描述 投票:1回答:3

我具有以下形式的数组:

[
{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};
        }, {});

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

javascript typescript javascript-objects reduce
3个回答
0
投票

要么寻找对象的数组,然后使用以下示例:

const res = [{
  key: 'key1',
  value: 'value1',
}, {
  key: 'key1',
  value: 'value1',
}, {
  key: 'key1',
  value: 'value1',
}].reduce((tmp, {
  key,
  value,
}) => [
  ...tmp,

  {
    [key]: value,
  },
], []);

console.log(res);

无论您寻找一个唯一的对象,都适用以下示例:

const res = [{
  key: 'key1',
  value: 'value1',
}, {
  key: 'key2',
  value: 'value2',
}, {
  key: 'key3',
  value: 'value3',
}].reduce((tmp, {
  key,
  value,
}) => ({
  ...tmp,

  [key]: value,
}), {});

console.log(res);

关于代码,正如人们已经在注释中告诉您的那样,您不能简单地使用+运算符来连接数组或对象。


0
投票

您想要这样吗?

let arr = [
{key: "key1", value: "value1"},
{key: "key2", value: "value2"},
{key: "key3", value: "value3"}

]

let result = arr.map(el => {
   let { key, value } = el;
   return { [key]: value}
})

console.log(result);

let arr = [
{key: "key1", value: "value1"},
{key: "key2", value: "value2"},
{key: "key3", value: "value3"}

]

let result = { ...arr.map(el => {
      let { key, value } = el;
      return { [key]: value}
   })
}

console.log(result);

0
投票

问题归您所有

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((acc, cv) => {
  acc[cv.key] = cv.value;
  return acc
}, {})
console.log(x);
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.