说我有一个对象数组:
const peopleArray = [
{
'date': '3/1',
'people': 0
},
{
'date: '3/2',
'people': 5
},
{
'date: '3/3',
'people': 8
},
...
];
我正在尝试绘制图表以显示人数之间的每日差异,因此我需要以下对象数组:
[{
'date': '3/1,
'diff': 0 // Shows 0 the first day.
},
{
'date': '3/2',
'diff': 5 // 5 people joined.
},
{
'date': '3/3',
'diff': 3 // 3 more people joined.
},
...
];
我知道我可以Array.push()
通过for循环来实现:
const peopleArray = [{
date: '3/1',
people: 0
},
{
date: '3/2',
people: 5
},
{
date: '3/3',
people: 8
}
];
let diffArray = [];
for (i = 0; i < peopleArray.length; i++) {
if (i === 0) {
// Shows 0 the first day
diffArray.push({
date: peopleArray[i].date,
diff: 0
});
} else {
diffArray.push({
date: peopleArray[i].date,
diff: peopleArray[i].people - peopleArray[i - 1].people
});
}
}
console.log(diffArray);
但有一个更清洁的方式使用要做到这一点map()
,reduce()
或任何这些阵列的功能呢?
您可以使用map()
并做类似的事情:
const peopleArray = [
{
date: "3/1",
people: 0,
},
{
date: "3/2",
people: 5,
},
{
date: "3/3",
people: 8,
},
];
let diffArray = peopleArray.map((o, i, a) => ({
date: o.date,
diff: i > 0 ? o.people - a[i - 1].people : 0,
}));
console.log(diffArray);
在map()
它接受三个参数的回调函数:
currentValue
-数组中正在处理的当前元素;index
-数组中正在处理的当前元素的索引:array
-调用了数组映射。因此,您可以使用这些参数来实现与for循环相同的功能。
的reduce()
是不是真的你在这种情况下,寻找什么,因为你需要的不仅仅是一个单一的产值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句