1 回答

TA贡献1752条经验 获得超4个赞
我能够使用 forEach 实现所需的功能,但它会改变原始数组中的对象
一旦您item在循环内部进行更改,它将修改原始数组。
有什么办法可以做到这一点map吗?
就在这里!您可以将rank其作为封闭变量拉起,然后仅在当前值低于前一个值时才增加它。
function assignLeaderboardRanks(leaderboard) {
let rank = 1;
return leaderboard.map((item, index) => {
const { total } = item;
if (index > 0 && total < leaderboard[index - 1].total) {
rank = index + 1
}
return {
rank: rank,
...item,
};
});
}
const leaderboard = [
{ total: 60 },
{ total: 55 },
{ total: 55 },
{ total: 55 },
{ total: 50 }
];
console.log(`original`, leaderboard);
const newLeaderboard = assignLeaderboardRanks(leaderboard);
console.log(`updated`, newLeaderboard);
添加回答
举报