我正在玩数组和箭头函数的限制,我正在尝试将此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);
答案 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);