Карта и сортировка за одну итерацию в Javascript? - PullRequest
4 голосов
/ 03 марта 2010

Можно ли сопоставить массив новому массиву и одновременно отсортировать его, не повторяя дважды (один раз для карты в первом массиве и один раз для сортировки во втором массиве)? Я пытался отсортировать его с помощью анонимной функции при использовании метода map следующим образом:

var arr=[4,2,20,44,6];
var arr2=arr.map(function(item, index, array){
    if(index==array.length-1 || item==array[index+1]){
        return item;
    }
    else if((item-array[index+1])<0){
        return item;
    }
    else if((item-array[index+1])>0){
        return array[index+1];
    }
});
console.log(arr2);

но это не похоже на работу. Я не совсем понимаю, как я пытаюсь это реализовать, или это просто проблема с моим кодом?

1 Ответ

2 голосов
/ 04 марта 2010

Сортировка обычно занимает более одной итерации. Это почти наверняка O (n log n) для среднего случая (алгоритм не определен в ECMAScript, но это лучшее, что вы можете сделать с сортировкой сравнения), так что нет смысла делать и то и другое одновременно.

Вы можете объединить их в одно выражение, поскольку sort возвращает сам массив:

function order(a, b) {
    return a < b ? -1 : (a > b ? 1 : 0);
}
var arr2 = arr.map(function(item) { ... }).sort(order);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...