2010-02-02 8 views

ответ

11

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

arr.sort(function(row1, row2) { 
    var k1 = row1["key"], k2 = row2["key"]; 
    return (k1 > k2) ? 1 : ((k2 > k1) ? -1 : 0); 
}); 
4

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

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

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

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

0

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

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.

2

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

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 (...)