从 forEach 创建对象
Create object from forEach
我想知道是否有办法将此代码重写为单个对象创建:
my_array = [
{key: 1, value: "foo"},
{key: 2, value: "bar"}
];
let my_obj = {};
my_array.forEach((elem) => {
my_obj[elem.key] = elem.value;
});
我想做的是:
my_array = [
{key: 1, value: "foo"},
{key: 2, value: "bar"},
];
const my_obj = ...?
有没有一种方法可以进行相当于 forEach
调用的一次性转换?
您可以使用 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"}
或者,使用 ES6 语法:
const my_object = my_array.reduce((prev, curr) => {
prev[curr.key] = curr.value;
return prev;
}, {});
您可以使用reduce功能。它应该像这样工作:
my_array = [
{key: 1, value: "foo"},
{key: 2, value: "bar"}
];
let my_obj = my_array.reduce(function(obj, elem) {
obj[elem.key] = elem.value;
return obj;
}, {});
// my_obj = { "1": "foo", "2": "bar" }
在ES6中,可以使用Object.assign
:
const obj = Object.assign({}, ...my_array.map(x => ({ [x.key]: x.value })));
// Or:
const obj = Object.assign({}, ...my_array.map(({ key, value }) => ({ [key]: value })));
这会将每个 { key: foo, value: bar }
转换为 { foo: bar }
,然后使用 Object.assign 将它们合并为一个对象。 (spread operator 用作 Object.assign 期望参数的可变列表。)
我想知道是否有办法将此代码重写为单个对象创建:
my_array = [
{key: 1, value: "foo"},
{key: 2, value: "bar"}
];
let my_obj = {};
my_array.forEach((elem) => {
my_obj[elem.key] = elem.value;
});
我想做的是:
my_array = [
{key: 1, value: "foo"},
{key: 2, value: "bar"},
];
const my_obj = ...?
有没有一种方法可以进行相当于 forEach
调用的一次性转换?
您可以使用 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"}
或者,使用 ES6 语法:
const my_object = my_array.reduce((prev, curr) => {
prev[curr.key] = curr.value;
return prev;
}, {});
您可以使用reduce功能。它应该像这样工作:
my_array = [
{key: 1, value: "foo"},
{key: 2, value: "bar"}
];
let my_obj = my_array.reduce(function(obj, elem) {
obj[elem.key] = elem.value;
return obj;
}, {});
// my_obj = { "1": "foo", "2": "bar" }
在ES6中,可以使用Object.assign
:
const obj = Object.assign({}, ...my_array.map(x => ({ [x.key]: x.value })));
// Or:
const obj = Object.assign({}, ...my_array.map(({ key, value }) => ({ [key]: value })));
这会将每个 { key: foo, value: bar }
转换为 { foo: bar }
,然后使用 Object.assign 将它们合并为一个对象。 (spread operator 用作 Object.assign 期望参数的可变列表。)