代码之家  ›  专栏  ›  技术社区  ›  DA.

javascript数组排序

  •  1
  • DA.  · 技术社区  · 15 年前

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

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

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

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

    3 回复  |  直到 7 年前
        1
  •  6
  •   Community pid    7 年前

    带着声明 var sortedBarValues = barValues; ,您没有创建数组的副本。你只是在做参考。两个名称引用同一个数组。

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

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

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

        2
  •  1
  •   Alex Barrett    15 年前

    当你分配 barValues sortedBarValues 你实际上分配了一个 参考 原著 Array . 当你排序时 分类巴氏值 , 巴沃斯 也会被排序,因为它们实际上是完全相同的。

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

    var sortedBarValues = Array.apply({}, barValues);
    sortedBarValues.sort(function(a, b) { return b - a; });
    
        3
  •  0
  •   Keshav Gera    7 年前
    <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