防止初始数组排序

时间:2010-04-26 15:16:58

标签: javascript arrays sorting

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

// 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。无论哪种方式,数据总是最终从最高到最低排序。

4 个答案:

答案 0 :(得分:6)

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

您可以通过调用slice()来复制数组:

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

答案 1 :(得分:5)

您可以通过applying Math.max方法找到数组的最高价值,您无需对其进行排序:

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

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