Как отсортировать массив в JavaScript? - PullRequest
5 голосов
/ 02 февраля 2010
var arr = [];
arr.push(row1);
arr.push(row2);
...
arr.push(rown);

Как сортировать по row['key']?

Ответы [ 4 ]

11 голосов
/ 02 февраля 2010

Массив JavaScript имеет встроенный метод sort(). В этом случае будет работать что-то вроде следующего:

arr.sort( function(row1, row2) {
    var k1 = row1["key"], k2 = row2["key"];
    return (k1 > k2) ? 1 : ( (k2 > k1) ? -1 : 0 );
} );
4 голосов
/ 02 февраля 2010

Вы вызываете функцию сортировки массива с помощью компаратора. Компаратор JavaScript - это просто функция, которая возвращает -1, 0 или 1 в зависимости от того, меньше ли a, чем b, a равно b или a больше b:

myarray.sort(function(a,b){
    if(a < b){
        return -1;
    } else if(a == b){
        return 0;
    } else { // a > b
        return 1;
    }
});

Это всего лишь пример, ваша функция может основывать сравнение на том, что вы хотите, но для этого нужно вернуть -1,0,1.

Надеюсь, это поможет.

2 голосов
/ 02 февраля 2010

Вот набор функций, если вы хотите отсортировать по возрастанию, по убыванию или по нескольким столбцам в массиве.

var cmp = function(x, y){ return x > y? 1 : x < y ? -1 : 0; },
    arr =  [{a:0,b:0},{a:2,b:1},{a:1,b:2},{a:2, b:2}];

// sort on column a ascending
arr.sort(function(x, y){
    return cmp( cmp(x.a, y.a), cmp(y.a, x.a) );
});

// sort on column a descending
arr.sort(function(x, y){
    return cmp( -cmp(x.a, y.a), -cmp(y.a, x.a) );
});

// sort on columns a ascending and b descending
arr.sort(function(x, y){
    return cmp([cmp(x.a, y.a), -cmp(x.b, y.b)], [cmp(y.a, x.a), -cmp(y.b,x.b)]);
});

Чтобы получить сортировку по возрастанию, используйте "cmp (...)"и, чтобы получить сортировку по убыванию, используйте «-cmp (...)»

. Для сортировки по нескольким столбцам сравните два массива cmp (...)

.
0 голосов
/ 02 февраля 2010

Рассмотрим следующий код:

var arr = new Array();

for(var i = 0; i < 10; ++i) {
    var nestedArray = [ "test", Math.random() ];
    arr.push(nestedArray);
}

function sortBySecondField(a, b) {
    var aRandom = a[1];
    var bRandom = b[1];

    return ((aRandom < bRandom) ? -1 : ((aRandom > bRandom) ? 1 : 0));
}

arr.sort(sortBySecondField);

alert(arr);

Теперь просто измените функцию sortBySecondField для сравнения a['key'] вместо a[1] и сделайте то же самое для b.

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