2015-09-06 11 views
7
abgerufen wurde

Mit der Unterstreichungsfunktion groupBy kann ein Array nach einer seiner Elementeigenschaften gruppiert werden. Das Ergebnis ist ein Objekt, das wie folgt Schlüssel-Wert-Paare aufweist: Gruppe> entsprechendes Array-Fragment.iterieren über ein Objekt, das von _.groupBy

var words = ['Hey', 'Hii', 'Salut'], 
    grouped = _.groupBy(words, 'length'); 

gruppiert sieht wie folgt aus:

{ 
    '3': ['Hey', 'Hii'], 
    '5': ['Salut'] 
} 

die eine einfache und sichere Art und Weise über diese zu durchlaufen wäre, sagen wir beginnend mit der höchsten Länge von der nächstniedrigeren gefolgt. Dies funktioniert:

_.each(_.toArray(grouped).reverse(), function(v) { 
    console.log(v); 
}); 

Aber ich denke, es ist nicht ganz korrekt, da Objekte ungeordnete Listen sind und die richtige Reihenfolge geschieht hier nur durch Zufall. Irgendwelche Kommentare dazu?

Antwort

5

Sie haben Recht, dass Sie nicht auf die Objektschlüssel Sortierung verlassen können, müssen Sie die richtige Sortierung erzwingen. Mit Strich können Sie _.sortBy verwenden:

_.each(
    _.sortBy(
     _.toArray(grouped), function (num) { 
      return num; 
     } 
    ).reverse(), 
    function (v) { 
     console.log(v); 
    } 
); 
4

Dies kann in reiner js erfolgen:

Object.keys(grouped) // get the keys as array 
    .sort(function(a, b) { return b - a; }) // sort them from highest to lowset 
    .forEach(function(lengthKey) { // iterate the sorted keys' array 
     console.log(grouped[lengthKey]); // get the words' arrays by key from grouped 
    }); 
Verwandte Themen