[英]Reduce array to object using arrow function
我正在尝试使用数组和箭头函数的限制,并尝试将此 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, {});
所以我正在寻找一个单一的语句,它设置值并返回对象。 ( new Map()
不是一个选项,因为我需要常规的{}
格式)。
var months = [ { Id: 1 }, { Id: 2 }, { Id: 3 } ]; var monthsById = months.reduce((byId, month) => byId[month.Id] = month, {}); console.log(monthsById);
您可以在每次迭代中返回byId
并将函数体包装在括号中()
var months = [ { Id: 1 }, { Id: 2 }, { Id: 3 } ]; var monthsById = months.reduce((byId, month) => (byId[month.Id] = month, byId), {}); console.log(monthsById);
您可以使用Object.assign
设置具有计算属性名称的新属性并返回整个对象。
var months = [{ Id: 1 }, { Id: 2 }, { Id: 3 }], monthsById = months.reduce((byId, month) => Object.assign(byId, { [month.Id]: month }), {}); console.log(monthsById);
一个传播的例子。
var months = [{ Id: 1 }, { Id: 2 }, { Id: 3 }], monthsById = months.reduce((byId, month) => ({ ...byId, [month.Id]: month }), {}); console.log(monthsById);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.