【问题标题】:Prevent initial array from sorting防止初始数组排序
【发布时间】:2010-04-26 15:16:58
【问题描述】:

我有一个数组,当我最终在文档中输出数组时,对象的顺序很重要。但是,我还在函数中对数组进行排序以找到最大值。问题是我运行函数找到最大值后,无法取回数组的原始排序顺序。

// html document
var data = [75,300,150,500,200];

createGraph(data);

// js document

function createGraph(data) {

    var maxRange = getDataRange(data);

    // simpleEncode() = google encoding function for graph
    var dataSet = simpleEncode(data,maxRange);

}

function getDataRange(dataArray) {
    var num = dataArray.sort(sortNumber);
    return num[0];
}

我还尝试将数据设置为 dataA 和 dataB,并在 getDataRange 函数中使用 dataB,在 simpleEncode 函数中使用 dataA。无论哪种方式,数据最终总是从高到低排序。

【问题讨论】:

  • 到目前为止发布的任何答案都可以解决您的问题。

标签: javascript arrays sorting


【解决方案1】:

正如您所发现的,sorting 数组会就地修改数组。
为防止这种情况,您需要sort()一个单独的数组副本,以免影响原始数组。

你可以通过调用slice()复制一个数组:

var num = dataArray.slice().sort(sortNumber);

【讨论】:

    【解决方案2】:

    你可以通过applyingMath.max方法找到你的数组的最大值,你不需要排序:

    function getDataRange(dataArray) {
      return Math.max.apply(Math, dataArray);
    }
    

    【讨论】:

    • 不客气@George,试试看,IMO apply 可以比对原始数组的副本进行排序更快。
    • 我刚试过这个方法,效果很好。我的数组只包含 6 个对象,所以我看不出有任何速度差异,但以后一定会牢记在心。
    【解决方案3】:

    不是对数组进行排序以获得最高值,而是使用 for 或 foreach 循环遍历它并找到最高值。它会比排序更快,并且会让你的数组保持不变。

    【讨论】:

      【解决方案4】:

      两种可能性:要么对数组的副本进行排序(只要它不太大就可以),要么扫描整个数组以找到最大的项目而不对其进行排序。

      【讨论】:

        猜你喜欢
        • 2022-01-25
        • 1970-01-01
        • 2014-02-08
        • 2015-08-25
        • 2015-02-14
        • 2015-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多