开发者

Prevent initial array from sorting

I have an array where the order of the objects is important for when I finally output the array in a document. However, I'm also sorting the array in a function to find the highest value. The problem is that I after I run the function to find the highest value, I can't get the original sort order of the array back.

// 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(sortNumbe开发者_Go百科r);
    return num[0];
}

I've also tried setting data to dataA and dataB and using dataB in the getDataRange function and dataA in the simpleEncode function. Either way, data always end up being sorted from highest to lowest.


As you've discovered, sorting an array modifies the array in-place.
To prevent that, you need to sort() a separate copy of the array, so that the original array is not affected.

You can copy an array by calling slice():

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


You can find the highest value of your array simply by applying the Math.max method to it, you don't need to sort it:

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


Rather than sorting the array to get the highest value, just use a for or foreach loop to walk through it and find the highest value. It will be faster than sorting, and will leave your array unchanged.


Two possibilities: either sort a copy of the array (fine as long as it's not too big) or else scan through the array to find the largest item without sorting it at all.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜