Предотвратить сортировку исходного массива - PullRequest
2 голосов
/ 26 апреля 2010

У меня есть массив, для которого важен порядок объектов, когда я наконец вывожу массив в документ. Тем не менее, я также сортирую массив в функции, чтобы найти наибольшее значение. Проблема в том, что после запуска функции, чтобы найти самое высокое значение, я не могу получить исходный порядок сортировки массива.

// 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 и использовать dataB в функции getDataRange и dataA в функции simpleEncode. В любом случае, данные всегда сортируются по возрастанию.

Ответы [ 4 ]

6 голосов
/ 26 апреля 2010

Как вы обнаружили, sort использование массива изменяет массив на месте.
Чтобы предотвратить это, вам нужно sort() создать отдельную копию массива, чтобы исходный массив не был затронут.

Вы можете скопировать массив, вызвав slice():

var num = dataArray.slice().sort(sortNumber);
5 голосов
/ 26 апреля 2010

Вы можете найти самое высокое значение вашего массива, просто применив к нему метод Math.max, вам не нужно его сортировать:

function getDataRange(dataArray) {
  return Math.max.apply(Math, dataArray);
}
2 голосов
/ 26 апреля 2010

Вместо того, чтобы сортировать массив, чтобы получить наибольшее значение, просто используйте цикл for или foreach, чтобы пройти через него и найти самое высокое значение. Это будет быстрее, чем сортировка, и оставит ваш массив без изменений.

0 голосов
/ 26 апреля 2010

Две возможности: либо отсортировать копию массива (хорошо, если он не слишком большой), либо сканировать массив, чтобы найти самый большой элемент без его сортировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...