Javascript:根据索引映射两个数组,然后为超出索引的条目分配相同的值

Javascript: Mapping two arrays based on indexes then assign the same value for entries that are out of index

我有一个函数会给出以下结果;

const points = [10,5,2];

const data = 
[{name:"John",ranking:1},{name:"Sally",ranking:2},{name:"Tom",ranking:3},
{name:"Harry",ranking:4},{name:"Jess",ranking:5},{name:"Kelly",ranking:6}];

const result = data.reduce((result,{name,rank} => 
(result[name]=points[rank-1],result),{});

console.log(result);

{"John": 10,"Sally": 5,"Tom": 2,"Harry": undefined, "Jess": undefined ,"Kelly": undefined}

我希望所有排名第 3 或更高的玩家都被授予数组的最后一个值 points,即 2,而不是未定义的,我如何修改函数以实现以下结果?谢谢!

{"John": 10,"Sally": 5,"Tom": 2,"Harry": 2,"Jess": 2,"Kelly": 2}

我认为对此类内容使用 reduce 不合适。 您可以使用包含每个玩家和分配点数的对象数组吗?

const result = data.map((user) => ({
  ...user,
  points: points[user.ranking-1] || points[points.length-1]
}))