Javascript 跟踪reduce中以前的值
我正在尝试创建一系列的车型年,因此车型年是这里唯一的关键,如果它存在,它只会增加总里程 我知道如何使用year作为year数组的标识符,但在这种特定情况下,我只需要一个常规标识符Javascript 跟踪reduce中以前的值,javascript,Javascript,我正在尝试创建一系列的车型年,因此车型年是这里唯一的关键,如果它存在,它只会增加总里程 我知道如何使用year作为year数组的标识符,但在这种特定情况下,我只需要一个常规标识符[0,1,2] 以下是我正在尝试做的和我开始做的 const数据=[{ 年份:2001年, 汽车:“奥迪”, 净收益率:5, 平均年龄:2000 }, { 年份:2010年, 汽车:“奥迪”, 净收益率:3, 平均年龄:2000 }, { 年份:2019年, 汽车:“奥迪”, 净收益率:5, 平均年龄:2000 },
[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);
您的代码片段有错误。您能更新它们以使其运行吗?为什么第一个条目没有相似之处?预期的输出是什么?噢,对象。值对我来说是缺失的部分,谢谢!