2017-01-16 2 views
1

I Array von Objekten, die wie folgt aussieht:Javascript - Sort-Objekte Array nach Schlüsseln von Objekteigenschaft

var array = [{ 
key: {name: "C Some name", id: 123}, 
value: {value: 1, element:"some element"} 
}, { 
key: {name: "A Name 2", id: 1234}, 
value: {value: 4, element:"some element 2"} 
}, { 
key: {name: "B Other name", id: 1235}, 
value: {value: 2, element:"some element 3"} 
}] 

Ich möchte nach Name dieses Array sortieren (innen Schlüsselobjekt) und Wert (innerhalb Wertobjekt) . Ergebnis sortiert nach Namen soll dieses Ergebnis zurück:

[{ 
key: {name: "A Name 2", id: 1234}, 
value: {value: 4, element:"some element 2"} 
}, { 
key: {name: "B Other name", id: 1235}, 
value: {value: 2, element:"some element 3"} 
}, { 
key: {name: "C Some name", id: 123}, 
value: {value: 1, element:"some element"} 
}] 

und Ergebnis sortiert nach Wert sollte wie folgt aussehen:

[{ key: {name: "C Some name", id: 123}, 
    value: {value: 1, element:"some element"} 
}, { 
key: {name: "B Other name", id: 1235}, 
    value: {value: 2, element:"some element 3"} 
}, { 
key: {name: "A Name 2", id: 1234}, 
    value: {value: 4, element:"some element 2"} 
}] 

Ich habe versucht, dies für sortiert nach Namen:

array.sort(a,b){ 
return a.key["name"] - b.key["name"]; 
} 

Und das für die Sortierung nach Wert:

array.sort(a,b){ 
return a.key["value"] - b.key["value"]; 
} 

aber es funktioniert nicht. Wie kann ich dieses Array sortieren?

+1

'a.key [name]' bedeutet, dass Sie eine Variable namens ' name' und Sie möchten auf eine Eigenschaft von 'a.key' mit diesem passenden Namen zugreifen. Haben Sie 'a.key.name' versucht, den korrekten Wert zu erhalten? –

+0

Ich sollte wahrscheinlich in meine Frage setzen a.key ["name"] was ist gleich a.key.name – snoopy25

Antwort

2

Sie sollten die Strings mit > vergleichen.

var array = [{ 
 
    key: {name: "C Some name", id: 123}, 
 
    value: {value: 1, element:"some element"} 
 
}, { 
 
    key: {name: "A Name 2", id: 1234}, 
 
    value: {value: 4, element:"some element 2"} 
 
}, { 
 
    key: {name: "B Other name", id: 1235}, 
 
    value: {value: 2, element:"some element 3"} 
 
}]; 
 

 
var newArray = array.sort(function(first, second) { 
 
    var a = first.key.name; 
 
    var b = second.key.name; 
 
    
 
    if(a > b) { 
 
     return 1; 
 
    } else if(a < b) { 
 
     return -1; 
 
    } else { 
 
     return 0; 
 
    } 
 
}); 
 

 
console.log(newArray);

+0

Warum der Downvote? –

+1

Mit Rücksicht auf die Moderatoren, manchmal ist die Moderation übertrieben! – Agalo

1

Einer der Weg ist, wie dies zu realisieren.

Grundsätzlich Verwendung der Pfeil-Funktion für ein Rückruf Sortieren und dann die 2 string Vergleich von localeCompare verwenden.
first.key.name.localeCompare(second.key.name)

Für ganzzahlige Werte können Sie sie direkt vergleichen, indem Sie eine Subtraktion durchführen.
first.value.value - second.value.value.

Die wichtige Sache ist zu wissen, wie die Vergleicher Funktion funktioniert für 2 Werte a und b.

  • Weniger als 0: Sortieren a ein unterer Index als b zu sein.

  • Null: a und b sollte als gleich betrachtet werden, und keine Sortierung durchgeführt.

  • größer als 0: Sortieren b ein unterer Index zu sein, als a

var array = [{ 
 
key: {name: "C Some name", id: 123}, 
 
value: {value: 1, element:"some element"} 
 
}, { 
 
key: {name: "A Name 2", id: 1234}, 
 
value: {value: 4, element:"some element 2"} 
 
}, { 
 
key: {name: "B Other name", id: 1235}, 
 
value: {value: 2, element:"some element 3"} 
 
}] 
 

 
var resultSortedByName = array.sort((first,second) => {return first.key.name.localeCompare(second.key.name)}); 
 
console.log(resultSortedByName); 
 

 
var resultSortedByValue = array.sort((first,second) => {return (first.value.value - second.value.value)}); 
 
console.log(resultSortedByValue);

Verwandte Themen