【问题标题】:javascript array sortingjavascript数组排序
【发布时间】: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 也正在排序。这是为什么?复制数组以便将其与原始数组分开排序的正确方法是什么?

【问题讨论】:

    标签: javascript arrays sorting


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2017-03-27
      • 1970-01-01
      • 2020-06-13
      • 1970-01-01
      • 2012-12-10
      • 2014-06-09
      • 2020-11-14
      • 2021-06-02
      • 2013-08-02
      相关资源
      最近更新 更多