Array.prototype.sort()
方法会更改数组,因此引用该数组的变量的值也会更改。这对我来说太可怕了,之后我将无法访问原始阵列。
例如:
function keepOriginalArray([...arr]){
let storeWithoutSorting = arr; // I want original copy of array in variable.
arr.sort()
return storeWithoutSorting // gives result ['a','b'] . Variable's value was changed after calling sort method.
}
keepOriginalArray(['b', 'a'])
我很想知道它是如何工作的,在这种情况下如何将原始数组的副本存储在变量中?
答案 0 :(得分:2)
Sort
突变了原始数组,因此您需要创建一个数组副本。在这里,我正在使用...
传播语法来创建原始数组的浅表副本
function keepOriginalArray(arr){
let storeWithoutSorting = [...arr];
arr.sort()
return storeWithoutSorting
}
console.log(keepOriginalArray(['b', 'a']))
答案 1 :(得分:2)
数组是引用类型。将arr值存储到storeWithoutSorting时,实际上是在存储其引用。这就是为什么在执行排序时都会对两者进行排序。 要创建数组的副本,可以使用传播运算符:
let storeWithoutSorting = [...arr]
它将创建一个具有新引用的新数组。因此,当您对arr执行排序时,将不会对其进行操作。