javascript数组排序

javascript array sorting

barvalues是我传递给函数的数组。在这个函数中,我有:

1
2
3
4
5
6
alert(barValues);

var sortedBarValues = barValues;
sortedBarValues.sort(function(a,b){return b - a});

alert(barValues);

我试着用两个数组来结束。barvalues是原始数组,sortedbarvalues是该数组的副本,现在已排序。

但是,通过这两个警报,我发现barvalues也在被排序。为什么会这样?创建数组副本以便将其与原始数组分开排序的正确方法是什么?


使用语句var sortedBarValues = barValues;时,您不会复制数组。你只是在做参考。两个名称引用同一个数组。

你可以用var sortedBarValues = barValues.slice();复制。slice方法用于对数组进行切片,但如果不向它传递任何参数,它将生成一个副本。

记住,使用slice方法在多维数组上无法正常工作。复制多维数组有些困难,但jquery的extend函数可以帮您完成。

您可以在本文中看到关于如何复制数组的信息。


当您将barValues分配给sortedBarValues时,您实际上分配了对原始Array的引用。当你对sortedBarValues排序时,barValues也会被排序,因为它们实际上是完全相同的。

在对数组进行排序之前,您需要复制一个数组,这样另一个数组就不会受到影响。

1
2
var sortedBarValues = Array.apply({}, barValues);
sortedBarValues.sort(function(a, b) { return b - a; });


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<html>
<body>

JavaScript Array Sort

<p>
The lowest number is <span id="demo"></span>.
</p>


var points = [78, 78,99, 2, 5, 25, 10];
document.getElementById("demo").innerHTML = myArrayMin(points);

function myArrayMin(arr) {
    var len = arr.length
    var min = Infinity;
    while (len--) {
      if (arr[len] < min) {
        min = arr[len];
      }
    }
    return min;
}


</body>
</html>

输出为2