Javascript 将array.sort的结果存储在另一个变量中

Javascript 将array.sort的结果存储在另一个变量中,javascript,arrays,sorting,Javascript,Arrays,Sorting,这似乎是一个简单的问题,但我找不到太多的信息 var array1 = new Array(4, 3, 1, 2, 0, 5); var array2 = array1; array2.sort(function(a, b) { return a - b; }) 预期行为:array2已排序,array1以4开头的原始顺序排列 实际结果:两个数组都已排序 如何对阵列1进行排序—同时维护阵列1并将排序结果存储在阵列2中?我认为执行array2=array1会复制变量,而不是引用它。然而,

这似乎是一个简单的问题,但我找不到太多的信息

var array1 = new Array(4, 3, 1, 2, 0, 5);
var array2 = array1;
array2.sort(function(a, b) {
    return a - b;
})
预期行为:array2已排序,array1以4开头的原始顺序排列

实际结果:两个数组都已排序


如何对阵列1进行排序—同时维护阵列1并将排序结果存储在阵列2中?我认为执行
array2=array1
会复制变量,而不是引用它。然而,在Firefox的控制台中,两个数组都是按顺序排列的。

这是因为
var array2=array1您正在对该对象进行新引用,因此对array2的任何操作都将影响array1,因为它们基本上是同一个对象

JS不提供propner
clone
function/method,因此请尝试以下广泛采用的方法:

var array1 = new Array(4, 3, 1, 2, 0, 5);
var array2 = JSON.parse(JSON.stringify(array1));
array2.sort(function(a, b) {
    return a - b;
});
希望有帮助:)


var array2=array1.slice()为什么默认行为是引用原始数组而不是复制它?。有些方法正在对引用进行更改,有些方法创建新数组。查看数组文档。应该已经意识到这两个数组是一个数组,并且不仅仅是排序函数。我想这基本上是一个重复的问题,一开始并不明显,这两个数组总是相同的,不仅仅是排序函数。“你在做对象的浅拷贝”-不,你根本没有做对象的拷贝,您只是对同一对象进行了第二次引用。@nnnnnnnn更准确的一点是,这是一个浅拷贝,对于OP的数字数组来说应该可以,但对于对象数组来说可能不够。
var array1 = new Array(4, 3, 1, 2, 0, 5);
var array2 = array1.slice();