2017-07-28 4 views
0

Ich arbeite an einer Funktion, die meine Liste aufsteigend sortieren wird. Also habe ich versucht, den ff-Codes:Sortierung in Underscore js

if(score === 'Midterm Score'){ 
     _.each(students, function(elem, index, list){ 
      _.sortBy(students, function(elem){ 
       console.log(elem.midterm_score); 
      }); 
      }); 
     } 

Also mit den elem.midterm_score es nicht meiner Liste über midterm Punktzahl sortieren, wie hier zu sehen.

enter image description here

Ich erwarte, dass es so, 90, 80, 70 und so weiter, etwas zu sein. Irgendeine Idee was vermisse ich? Bitte helfen Sie!

Antwort

2

Sie verwenden die sortBy-Methode falsch. Überprüfen Sie es in der docs

// First of all we need students 
var students = [ 
    {name: 'a', midterm_score: 60}, 
    {name: 'b', midterm_score: 70}, 
    {name: 'c', midterm_score: 40} 
]; 

// Sort by midterm score and assign to students variable 
students = _.sortBy(students, 'midterm_score'); 

// print array in each loop 
_.each(students, function(el) { 
    console.log(el); 
}); 
+0

Ja, ich denke, das funktioniert. Ich sollte die Plätze der einzelnen wechseln und die sortierten Gegenstände einfach in eine Variable legen. –

0

Nach dem docs:

Gibt eine (stabil) Kopie der Liste sortiert, sortiert in aufsteigender Reihenfolge von die Ergebnisse der einzelnen Werte durch iteratee läuft. iteratee kann auch den String-Namen der Eigenschaft nach sortieren (z. B. Länge).

Es kann sein, dass Sie Dinge übermäßig komplizieren. Um die Liste zu sortieren, basierend auf dem Wert einer Eigenschaft wie midterm_score, übergeben sie einfach als das zweite Argument, als solche:

sortBy(students, 'midterm_score');

Verwendung einer Funktion wie die iteree für Transformationen auf Ihre Daten, die tut hier nicht notwendig erscheinen. Sie werden in einer solchen Funktion erwartet, das transformierte Ergebnis mit dem Befehl return explizit (gemäß den Dokumenten) zurückzugeben.