繁体   English   中英

使用箭头函数将数组缩减为对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM