我有一个数组,当我最终在文档中输出数组时,对象的顺序非常重要。但是,我也在函数中对数组进行排序以找到最高值。问题是我运行函数后找到最高值,我无法得到数组的原始排序顺序。
// 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。无论哪种方式,数据总是最终从最高到最低排序。
答案 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)
两种可能性:要么对数组的副本进行排序(只要它不是太大就很好),要么扫描数组以找到最大的项目而不进行排序。