javascript数组排序

Posted

技术标签:

【中文标题】javascript数组排序【英文标题】:javascript array sorting 【发布时间】:2010-12-02 19:50:36 【问题描述】:

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

alert(barValues);

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

alert(barValues);

我试图以两个数组结束。 barValues 是原始数组,而 sortedBarValues 是该数组的副本,现在已排序。

但是,通过这两个警报,我发现 barValues 也正在排序。这是为什么?复制数组以便将其与原始数组分开排序的正确方法是什么?

【问题讨论】:

【参考方案1】:

使用var sortedBarValues = barValues; 语句,您不会复制数组。你只是做一个参考。两个名字都指向同一个数组。

您可以使用var sortedBarValues = barValues.slice(); 复制它。 slice 方法用于对数组进行切片,但如果您不向其传递任何参数,它会进行复制。

请记住,使用 slice 方法不能在多维数组上正常工作。复制多维数组有些棘手,但jQuery的extend函数可以为您完成。

您可以在this post 中查看有关如何复制数组的信息。

【讨论】:

谢谢,迈克。很好的解释。【参考方案2】:

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

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

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

【讨论】:

谢谢,亚历克斯。我要去查找有关 javascript 参考的更多信息!【参考方案3】:
<html>
<body>

<h2>JavaScript Array Sort</h2>

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

<script>
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;

</script>

</body>
</html>

输出为 2

【讨论】:

以上是关于javascript数组排序的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript数字数组怎么按数字大小排序?

JavaScript数字数组怎么按数子大小排序

JavaScript数组排序(冒泡排序选择排序桶排序快速排序)

如何保持Javascript数组排序,而不对其进行排序

JavaScript对象数组如何按指定属性和排序方

javascript中的数组排序——sort()方法