Javascript js:array.reduce未正确累积基础值
我希望结果是一个对象,它将每天作为键,值作为数组: 预期:Javascript js:array.reduce未正确累积基础值,javascript,Javascript,我希望结果是一个对象,它将每天作为键,值作为数组: 预期: arr = [ { day: "monday", ages: [1,5,2] }, { day: "tuesday", ages: [9] }, { day: "monday", ages: [22,24,28] }, {
arr = [
{
day: "monday",
ages: [1,5,2]
},
{
day: "tuesday",
ages: [9]
},
{
day: "monday",
ages: [22,24,28]
},
{
day: "tuesday",
ages: [19]
},
]
我尝试使用reduce,如下所示:
{
monday: [1,5,2,22,24,28],
tuesday: [9,19]
}
但它给了我:
x = arr.reduce((acc,curr) => {
acc[curr.day] = []
acc[curr.day].push(curr.ages)
return acc
})
为什么它要添加年龄和日期作为键?在reduce{}中缺少初始值,那么数组在每次迭代中都不会重用,最后数组也不会连接起来 arr=[ { 日期:星期一, 年龄:[1,5,2] }, { 日期:星期二, 年龄:[9] }, { 日期:星期一, 年龄:[22,24,28] }, { 日期:星期二, 年龄:[19] }, ] console.logarr.reduceac,curr=>{ acc[当前日期]=acc[当前日期]| |[] acc[当前日期]=acc[当前日期].concatcurr.ages 返回acc
}, {}; reduce{}中缺少初始值,则数组不会在每次迭代中重用,最后数组不会连接 arr=[ { 日期:星期一, 年龄:[1,5,2] }, { 日期:星期二, 年龄:[9] }, { 日期:星期一, 年龄:[22,24,28] }, { 日期:星期二, 年龄:[19] }, ] console.logarr.reduceac,curr=>{ acc[当前日期]=acc[当前日期]| |[] acc[当前日期]=acc[当前日期].concatcurr.ages 返回acc }, {}; 您可以使用一个用于分配空数组的数组和一个推式扩展数组,并使用一个空对象作为累加器的起始值
{
ages: [1,5,2],
day: "tuesday",
monday: [22,24,28],
tuesday: [19]
}
您可以使用一个用于分配空数组的数组和一个推式扩展数组,并使用一个空对象作为累加器的起始值
{
ages: [1,5,2],
day: "tuesday",
monday: [22,24,28],
tuesday: [19]
}
当您为reducer指定初始值(即:{})时,它会有所帮助,因此您可以简单地检查属性是否存在,如果存在,则添加到属性中,如果没有,则设置它 常数arr=[ { 日期:星期一, 年龄:[1,5,2] }, { 日期:星期二, 年龄:[9] }, { 日期:星期一, 年龄:[22,24,28] }, { 日期:星期二, 年龄:[19] }, ]; const result=arr.reduceac,curr=>{ 会计科目[当前日期]=会计科目[当前日期]?[…会计科目[当前日期],…当前日期]:当前日期; 返回acc; }, {};
console.logresult 当您为reducer指定初始值(即:{})时,它会有所帮助,因此您可以简单地检查属性是否存在,如果存在,则添加到属性中,如果没有,则设置它 常数arr=[ { 日期:星期一, 年龄:[1,5,2] }, { 日期:星期二, 年龄:[9] }, { 日期:星期一, 年龄:[22,24,28] }, { 日期:星期二, 年龄:[19] }, ]; const result=arr.reduceac,curr=>{ 会计科目[当前日期]=会计科目[当前日期]?[…会计科目[当前日期],…当前日期]:当前日期; 返回acc; }, {};
console.logresult;这段代码还可以与良好的旧| |运算符一起使用,该运算符具有更大的支持数组不能出错。@FZs,?=防止多余的赋值,如新的| |=。没错,我刚才提到了它,因为???=是一个非常新的功能,并且不是每个人都可以传输他们的项目。顺便说一句,我会使用acc[curr.day]| | acc[curr.day]=[];这也会造成短路。此代码还可以与具有更大支持的好的旧| |运算符一起工作。数组不能是错误的。@FZs,?=防止多余的赋值,如新的| |=。没错,我刚才提到了它,因为它是一个非常新的功能,并且不是每个人都可以传输他们的项目。顺便说一句,我会使用acc[curr.day]| | acc[curr.day]=[];这也会造成短路。