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

时间:2016-08-09 07:32:37

标签: 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开始的原始顺序。

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

如何对array1进行排序 - 同时保持array1并在array2中存储排序结果?我认为做array2 = array1会复制变量,而不是引用变量。但是,在Firefox的控制台中,两个数组都显示为已排序。

2 个答案:

答案 0 :(得分:1)

这是因为var array2 = array1;你正在对对象进行新的引用,所以对array2的任何操作都会影响array1,因为它们基本上是同一个对象。

JS没有提供propner clone函数/方法,所以试试这个广泛采用的workarround:

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;
});

希望有所帮助:)

答案 1 :(得分:0)

You can copy a array with slice method

var array1 = new Array(4, 3, 1, 2, 0, 5);
var array2 = array1.slice();