2017-03-27 5 views
0

Ich habe eine Reihe von Zeilen, die ich aus einer Datenbank zurückgeben. Sie werden in der Form (media_id,order,front_image) zurückgegeben. Einer der media hat einen front_image Wert von TRUE. Ich habe dann eine Sortierfunktion wie folgt:Javascript-Funktion mit Override-Wert

.sort(function (m1, m2) { 
    if (m1.order < m2.order) { 
    val = -1; 
    } else if (m1.order > m2.order) { 
    val = 1; 
    } 
    return val; 
}) 

Was ich versuche zu erreichen, um sicherzustellen, dass, wenn ein media einen front_image Wert von TRUE hat, wird es die erste in der Reihe sein. Ich habe versucht, es als OR-Anweisung innerhalb der sortFunction hinzuzufügen, aber dies führte nicht zu den richtigen Ergebnissen.

+0

Beitrag der genannten Daten. –

+0

Ist TRUE der Wahrheitswert? Oder ist es eine Zeichenfolge "TRUE"? – trincot

+0

Was hast du genau versucht? – epascarello

Antwort

1

Da boolean Werte zwingen zu Werte für die Anzahl 0 (false) und 1 (true), können Sie wie folgt sortiert werden könnte:

.sort(function (m1, m2) { 
    return (m2.front_image - m1.front_image) || (m1.order - m2.order); 
}) 

Aber wenn der Wert den Vorrang gibt, ein String "TRUE" ist, dann könnte man einfach wiederum, dass in einen booleschen Ausdruck wie folgt aus:

.sort(function (m1, m2) { 
    return ((m2.front_image=="TRUE") - (m1.front_image=="TRUE")) || (m1.order - m2.order); 
}) 
1

ein möglicher Ansatz:

var input = [ 
 
    {front_image: false, order: 4}, 
 
    {front_image: false, order: 2}, 
 
    {front_image: true, order: 3}, 
 
    {front_image: false, order: 1}, 
 
    {front_image: false, order: 0} 
 
] 
 

 
var output = input.sort(function (l, r) { 
 
    return (r.front_image - l.front_image) 
 
     || (l.order - r.order) 
 
}) 
 

 
console.log(output)

1

Sie könnten überprüfen, ob front_image'TRUE' ist und die Elemente verschieben nach oben, dann sortieren nach order.

var data = [{ media_id: 1, order: 7, front_image: '' }, { media_id: 3, order: 6, front_image: '' }, { media_id: 6, order: 5, front_image: 'TRUE' }, { media_id: 4, order: 4, front_image: '' }, { media_id: 5, order: 3, front_image: 'TRUE' }, { media_id: 7, order: 2, front_image: '' }, { media_id: 8, order: 1, front_image: '' }]; 
 

 
data.sort(function (a, b) { 
 
    return (b.front_image === 'TRUE') - (a.front_image === 'TRUE') || a.order - b.order; 
 
}); 
 

 
console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }