Javascript 跟踪reduce中以前的值

Javascript 跟踪reduce中以前的值,javascript,Javascript,我正在尝试创建一系列的车型年,因此车型年是这里唯一的关键,如果它存在,它只会增加总里程 我知道如何使用year作为year数组的标识符,但在这种特定情况下,我只需要一个常规标识符[0,1,2] 以下是我正在尝试做的和我开始做的 const数据=[{ 年份:2001年, 汽车:“奥迪”, 净收益率:5, 平均年龄:2000 }, { 年份:2010年, 汽车:“奥迪”, 净收益率:3, 平均年龄:2000 }, { 年份:2019年, 汽车:“奥迪”, 净收益率:5, 平均年龄:2000 },

我正在尝试创建一系列的车型年,因此车型年是这里唯一的关键,如果它存在,它只会增加总里程

我知道如何使用year作为year数组的标识符,但在这种特定情况下,我只需要一个常规标识符
[0,1,2]

以下是我正在尝试做的和我开始做的

const数据=[{
年份:2001年,
汽车:“奥迪”,
净收益率:5,
平均年龄:2000
},
{
年份:2010年,
汽车:“奥迪”,
净收益率:3,
平均年龄:2000
}, {
年份:2019年,
汽车:“奥迪”,
净收益率:5,
平均年龄:2000
}, {
年份:2005年,
汽车:“奥迪”,
净收益率:5,
平均年龄:2000
}, {
年份:2009年,
汽车:“奥迪”,
净收益率:5,
平均年龄:2000
}, {
年份:2002年,
汽车:“奥迪”,
净收益率:4,
平均年龄:2000
}, {
年份:2001年,
汽车:“奥迪”,
净收益率:3,
平均年龄:2000
}, {
年份:2001年,
汽车:“奥迪”,
净收益率:5,
平均年龄:2000
}
]
const newList=data.reduce((acc、cur、idx)=>{
//尽量记录上一年、下一年的情况
//为唯一年份创建一个数组,并将milage添加到总数中
//使用此结构创建数组
//如果(上一年!==当前年份){
//acc={
//年份:当前年份,
//总迁移率:0
//  }
// }
返回acc

},[])
我建议使用对象更容易地跟踪到目前为止您查看的年份。然后,如果需要,可以使用
Object.entries
将对象缩回数组

const数据=[{
年份:2001年,
汽车:“奥迪”,
净收益率:5
},
{
年份:2010年,
汽车:“奥迪”,
净收益率:3,
平均年龄:2000
}, {
年份:2019年,
汽车:“奥迪”,
净收益率:5,
平均年龄:2000
}, {
年份:2005年,
汽车:“奥迪”,
净收益率:5,
平均年龄:2000
}, {
年份:2009年,
汽车:“奥迪”,
净收益率:5,
平均年龄:2000
}, {
年份:2002年,
汽车:“奥迪”,
净收益率:4,
平均年龄:2000
}, {
年份:2001年,
汽车:“奥迪”,
净收益率:3,
平均年龄:2000
}, {
年份:2001年,
汽车:“奥迪”,
净收益率:5,
平均年龄:2000
}
];
const summated=data.reduce((acc,el)=>{
如果(!根据【el.年】){
会计年度=0;
}
会计年度+=el.milage;
返回acc;
}, {})
console.log(总和);
const summedArr=Object.entries(summed).reduce(acc,item)=>{
acc.push({年份:项目[0],类别:项目[1]});
返回acc;
}, [])

console.log(summedArr)如果您只是尝试获取一个按年计算的总里程数的对象,则可以这样做:

const data = [
    {
        year: 2001,
        car: 'Audi',
        nrOfDoors: 5,
    },
    {
        year: 2010,
        car: 'Audi',
        nrOfDoors: 3,
        milage: 2000,
    },
    {
        year: 2019,
        car: 'Audi',
        nrOfDoors: 5,
        milage: 2000,
    },
    {
        year: 2005,
        car: 'Audi',
        nrOfDoors: 5,
        milage: 2000,
    },
    {
        year: 2009,
        car: 'Audi',
        nrOfDoors: 5,
        milage: 2000,
    },
    {
        year: 2002,
        car: 'Audi',
        nrOfDoors: 4,
        milage: 2000,
    },
    {
        year: 2001,
        car: 'Audi',
        nrOfDoors: 3,
        milage: 2000,
    },
    {
        year: 2001,
        car: 'Audi',
        nrOfDoors: 5,
        milage: 2000,
    },
];

const newList = data.reduce((acc, d) => {
    if(!acc[d.year]) {
        acc[d.year] = 0;
    }

    acc[d.year] += d.milage ? d.milage : 0;

    return acc;
}, {});

基本上,如果累加器对象还没有那一年,只需创建它并设置为零。然后,按年份将当前对象的里程数添加到累加器中。

对第二次尝试进行一些调整:累加器的起始值不应是数组。此外,在您编写的问题中,您希望按年份模型分组,因此
car
属性也应该在分组中发挥作用。使用
Object.values
将分组结果提取为数组。如果输出数组按型号和年份排序,可能会更好

const data=[{年份:2001,汽车:奥迪,nrOfDoors:5,米拉奇:2000},{年份:2010,汽车:奥迪,nrOfDoors:3,米拉奇:2000},{年份:2019,汽车:奥迪,nrOfDoors:5,米拉奇:2000},{年份:2005,汽车:奥迪,nrOfDoors:5,米拉奇:2000},{年份:2009,汽车:奥迪,nrOfDoors:5,米拉奇:2000},{年份:2002,汽车:奥迪,米拉奇:4,米拉奇:2000},{年份:2001,汽车:奥迪,nrOfDoors:3,米兰:2000},{年份:2001,汽车:奥迪,nrOfDoors:5,米兰:2000}]
让newList=Object.values(data.reduce)(acc,curr)=>{
const yearmodel=当前年份+当前车辆;
if(acc[yearmodel]==未定义){
acc[年度车型]={
年份:当前年份,
车:现在的车,
米拉奇:curr.milage | | 0
}
}else acc[yearmodel]。milage+=curr.milage;
返回acc;
}排序((a,b)=>a.car.localeCompare(b.car)| | a.year-b.year);

console.log(newList);
您的代码片段有错误。您能更新它们以使其运行吗?为什么第一个条目没有相似之处?预期的输出是什么?噢,
对象。值对我来说是缺失的部分,谢谢!