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]=[];这也会造成短路。