gpt4 book ai didi

javascript - 减少数组累加器中的推送方法不可用?

转载 作者:行者123 更新时间:2023-12-01 10:28:02 26 4
gpt4 key购买 nike

我有这个代码:

let fullConversations = conversationIdsByUser.reduce(async function(acc, conversation) {
const message = await MessageModel.find({ 'conversationId':conversation._id })
.sort('-createdAt')
.limit(1); // it returns an array containing the message object so I just get it by message[0]


return acc.push(message[0]);
},[]);

我的累加器是一个数组,message[0] 是我要推送的对象。但我有这个错误:

(node:516) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): TypeError: acc.push is not a function



帮助?

最佳答案

这是因为 Array.prototype.push()返回数组的新长度,而不是数组本身。您的代码将运行您的 reducer 的一次迭代,将累积值设置为整数,然后在下一次迭代中失败。

修复只是在修改后返回数组:

let fullConversations = [{a: 1}, {b: 2}].reduce(function(acc, next) {
console.log(acc.push(next))

return acc
}, []);

console.log(fullConversations)


但是请注意,您应该始终将纯函数传递给 Array.prototype.reduce()。 .遵守这条规则本来可以让你从这个问题中解脱出来。例子:

console.log([{a: 1}, {b: 2}].reduce((mem, next) => mem.concat([next]), []))

关于javascript - 减少数组累加器中的推送方法不可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45742030/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com