2010-02-02 3 views

Antwort

11

Ein JavaScript-Array verfügt über eine integrierte sort()-Methode. In diesem Fall in etwa wie folgt funktionieren würde:

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

Sie rufen die Sortierfunktion eines Arrays mit Ihrem Komparator auf. Ein Komparator JavaScript ist nur eine Funktion, die -1, 0 zurückgibt, oder 1, je nachdem, ob a kleiner als b ist, a gleich b oder a größer als b:

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

Dies ist nur ein Beispiel , Ihre Funktion kann den Vergleich auf was auch immer Sie wollen stützen, aber es muss -1,0,1 zurückgeben.

Hoffe, das hilft.

0

Betrachten Sie den folgenden Code ein:

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

Jetzt nur noch eine sortBySecondField Funktion ändern a['key'] statt a[1] zu vergleichen und für b das gleiche zu tun.

2

Hier ist von Funktionen einstellen, wenn Sie asending sortieren wollen, absteigend oder Art auf mehrere Spalten in einem Array.

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

Um eine aufsteigende Sortierung verwenden "cmp (...)", zu erhalten und eine absteigende Sortierung zu erhalten, verwenden Sie "-cmp (...)"

Und auf mehreren Spalten sortieren , vergleiche zwei Arrays von cmp (...)