使用箭头功能将数组减少到对象

时间:2018-03-10 12:24:19

标签: javascript arrays javascript-objects arrow-functions

我正在玩数组和箭头函数的限制,我正在尝试将此reduce函数转换为箭头函数:

var monthsById = months.reduce(function(result, month) {
                            result[month.Id] = month;
                            return result;
                        }, {});

但是我无法返回地图,因为result[month.Id] = month;将返回月份,而不是像这种方法中的地图:

var monthsById = months.reduce((byId, month) => byId[month.Id] = month, {});

所以我正在寻找一个单独的语句,它设置值AND返回对象。 (new Map()不是一个选项,因为我需要采用常规{}格式。

var months = [ { Id: 1 }, { Id: 2 }, { Id: 3 } ];

var monthsById = months.reduce((byId, month) => byId[month.Id] = month, {});

console.log(monthsById);

2 个答案:

答案 0 :(得分:3)

您可以使用Object.assign使用computed property names设置新属性并返回整个对象



var months = [ { Id: 1 }, { Id: 2 }, { Id: 3 } ];

var monthsById = months.reduce((byId, month) => Object.assign(byId, { [month.Id]: month }), {});

console.log(monthsById);




答案 1 :(得分:2)

您可以在每次迭代中返回byId并将函数体包装在括号中()



var months = [ { Id: 1 }, { Id: 2 }, { Id: 3 } ];

var monthsById = months.reduce((byId, month) => (byId[month.Id] = month, byId), {});
console.log(monthsById);