防止初始数组排序

Cho*_*hoy 2 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];
}
Run Code Online (Sandbox Code Playgroud)

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

SLa*_*aks 7

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

您可以通过调用slice()以下方法复制数组:

var num = dataArray.slice().sort(sortNumber);
Run Code Online (Sandbox Code Playgroud)


CMS*_*CMS 5

您只需找到你的阵列的最高值采用Math.max方法是,你并不需要对它进行排序:

function getDataRange(dataArray) {
  return Math.max.apply(Math, dataArray);
}
Run Code Online (Sandbox Code Playgroud)

  • 欢迎@George,尝试一下,IMO`apply`可能比排序原始数组的副本更快. (2认同)