这正在工作:
const messagesOrganised = {};
for (const msg of messagesGroupedByName) {
if (!messagesOrganised[msg.groupBy]) {
messagesOrganised[msg.groupBy] = [msg];
} else {
messagesOrganised[msg.groupBy].push(msg);
}
}
但当我尝试将其转换为使用reduce函数时,我得到了一个错误:
const messagesOrganised = messagesGroupedByName.reduce((acc, msg) => {
if (!acc[msg.groupBy]) {
acc[msg.groupBy] = [msg];
} else {
acc[msg.groupBy].push(msg);
}
}, {});
TypeError:无法读取未定义的属性"Name">
const messagesOrganised = messagesGroupedByName.reduce((acc, msg) => {
if (!acc[msg.groupBy]) {
acc[msg.groupBy] = [msg];
} else {
acc[msg.groupBy].push(msg);
}
return acc; // return the working object
}, {});
reduce
不会自动跟踪您的工作对象。您需要在reduce
的每次迭代中返回一些东西,通常是您的工作对象。某些东西将被传递到下一次迭代。
请参阅
Array.reduce()
的工作原理:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce#How_reduce((_works
const messagesOrganised = messagesGroupedByName.reduce((acc, msg) => {
if (!acc[msg.groupBy]) {
acc[msg.groupBy] = [msg];
} else {
acc[msg.groupBy].push(msg);
}
return acc; // <<<< You need to return accumulated value from callback
});
如果这有帮助,请告诉我。