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()
,有些测试用例会失败。为什么?
nums.slice().sort(/* ... */).forEach()
- 用slice复制数组
- 对数组进行排序
- 迭代已排序、已复制的数组
但是,对"nums"的进一步访问将不会排序,因为副本无论如何都没有保存。