Array.prototype.sort方法更改数组值以及该数组的变量值

时间:2019-03-23 17:43:18

标签: javascript python reactjs typescript

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'])

我很想知道它是如何工作的,在这种情况下如何将原始数组的副本存储在变量中?

2 个答案:

答案 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执行排序时,将不会对其进行操作。