2016-06-10 5 views
0

Ich versuche ein Array zu sortieren, aber die Ausgabe ist nicht das, was ich will.Sortierung eines Arrays mit mehr als zwei Zuständen

Ich habe ein Array wie folgt aus:

var myArray = [ 
    { 
     ... 
     "foo": false, 
     "bar": true, 
     ... 
    }, 
    { 
     ... 
     "foo": true, 
     "bar": false, 
     ... 
    }, 
    { 
     ... 
     "foo": true, 
     "bar": false, 
     ... 
    }, 
    { 
     ... 
     "foo": false, 
     "bar": false, 
     ... 
    }, 
    ... 
]; 

und ich möchte sortieren dieses Array auf diese Weise

myArray.sort(function(a,b) { 
    var foo = a.foo; 
    var bar = b.bar; 

    if(foo === false && bar === true) { 
     // this should sort on top 
     return -1; 
    } 

    if(foo === false && bar === false) { 
     // this should sort as second 
     return 0; 
    } 

    if(foo === true && bar === true) { 
     // this should sort as third 
     return 0; 
    } 

    if(foo === true && bar === false) { 
     // this should sort as last 
     return 1; 
    } 
}); 

Ich glaube, ich habe ein logisches Problem mit sort Funktion.

Was ich als Ausgabe möchte, ist ich es in der, wenn Kommentare Kommentar für Sie

Antwort

1

Sie können den Array-Objekten basierend auf den vorhandenen Bedingungen eine Gewichtungseigenschaft hinzufügen. Wie

var tempArr = myArray.map(function(obj) { 
    var foo = obj.foo; 
    var bar = obj.bar; 

    if (foo === false && bar === true) { 
     // this should sort on top 
     obj.weightage = 1; 
    } 

    if (foo === false && bar === false) { 
     // this should sort as second 
     obj.weightage = 2; 
    } 

    if (foo === true && bar === true) { 
     // this should sort as third 
     obj.weightage = 3; 
    } 

    if (foo === true && bar === false) { 
     // this should sort as last 
     obj.weightage = 4; 
    } 

    return obj; 
}); 

und verwenden Sie dann die Sortierfunktion auf Array

tempArr = tempArr.sort(function(a, b) { 
    return a.weightage - b.weightage; 
}); 
+0

das ist es, vielen Dank – kayza

0

Der Standard JavaScript nicht das Verhalten für Array.sort() definieren, wenn es mehrere Werte a, b mit compareFunction(a, b) == 0 trifft. Die meisten JavaScript-Engines verwenden einen stabilen Sortieralgorithmus, der garantiert, dass die relative Position solcher Elemente nach der gleichen Sortierung erhalten bleibt.

Dies erklärt, warum die Rückgabe 0 nicht das gewünschte Ergebnis liefert.

Sie müssten eine relative Reihenfolge aller relevanten Elemente festlegen und nur 0 zurückgeben, wenn die Reihenfolge wirklich keine Rolle spielt.

Verwandte Themen