2010-02-02 20 views

Respuesta

11

Una matriz de JavaScript tiene incorporado el método sort(). En este caso, algo así como lo siguiente funcionaría:

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

Llama a la función de ordenación de una matriz con su comparador. Un comparador JavaScript es sólo una función que devuelve -1, 0 o 1, dependiendo de si a es menor que b, a es igual a b, o a es mayor que b:

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

Esto es sólo un ejemplo , tu función puede basar la comparación en lo que quieras, pero necesita devolver -1,0,1.

Espero que esto ayude.

0

Considere el siguiente código:

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); 

Ahora a cambiar una función sortBySecondField comparar a['key'] en lugar de a[1] y hacer lo mismo para b.

2

Aquí es un conjunto de funciones si desea ordenar asending, descendente, o una especie de varias columnas de una matriz.

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)]); 
}); 

para conseguir una ordenación ascendente, utilice "cmp (...)", y para obtener una orden descendente, el uso "-CMP (...)"

Y para ordenar varias columnas , compare dos matrices de cmp (...)

Cuestiones relacionadas