为什么没有参数的array.protype.slice()会更改我的输出



我在leetcode上做这个挑战。

  • 挑战:
    https://leetcode.com/problems/relative-ranks/submissions/

为什么这个答案会被接受?

我的代码:

/**
* @param {number[]} nums
* @return {string[]}
*/
var findRelativeRanks = function(nums) {
const map = new Map();
let result;
nums
.slice()
.sort((a, b) => b - a)
.forEach((num, i) => map.set(num, (i + 1).toString()));
result = nums.map(num => {
switch(map.get(num)) {
case "1":
return "Gold Medal";
case "2":
return "Silver Medal";
case "3":
return "Bronze Medal";
default:
return map.get(num);
}
})
return result;
};

但是,如果我只是删除.slice(),有些测试用例会失败。为什么?

Slice返回数组的浅拷贝。
nums.slice().sort(/* ... */).forEach()

  1. 用slice复制数组
  2. 对数组进行排序
  3. 迭代已排序、已复制的数组

但是,对"nums"的进一步访问将不会排序,因为副本无论如何都没有保存。

最新更新