从forEach创建对象

Tho*_*son 8 javascript functional-programming javascript-objects

我试图找出是否有办法将此代码重写为单个对象创建:

my_array = [
  {key: 1, value: "foo"},
  {key: 2, value: "bar"}
];

let my_obj = {};
my_array.forEach((elem) => {
  my_obj[elem.key] = elem.value;
});
Run Code Online (Sandbox Code Playgroud)

我想做的是:

my_array = [
  {key: 1, value: "foo"},
  {key: 2, value: "bar"},
];

const my_obj = ...?
Run Code Online (Sandbox Code Playgroud)

有没有办法进行一次转换,相当于forEach通话?

Tim*_*imo 9

你可以使用Array.prototype.reduce()以下方法实现:

var my_array = [{key: 1, value:"foo"}, {key: 2, value:"bar"}];
  
var my_object = my_array.reduce(function(prev, curr) {
  prev[curr.key] = curr.value;
  return prev;
}, {});

console.log(my_object); // {"1": "foo", "2": "bar"}
Run Code Online (Sandbox Code Playgroud)


或者,使用ES6语法:

const my_object = my_array.reduce((prev, curr) => {
    prev[curr.key] = curr.value;
    return prev;
}, {});
Run Code Online (Sandbox Code Playgroud)