2015-09-06 8 views
7

アンダースコア関数groupByを使用すると、配列はその要素のプロパティの1つでグループ化できます。結果は、キーと値のペアを持つオブジェクトです:group>対応する配列フラグメント。このような_.groupByから取得したオブジェクトを反復する

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

グループ化されたルックス:

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

これを反復するための簡単かつ安全な方法だろう、次の最低続い最高の長さから始まると言います。

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

しかし、私は、オブジェクトが順不同リストであり、正しい順序がちょうど偶然にここで起こるので、それは、まったく正しくないと思う:これは動作します。 これに関するコメント?

答えて

5

あなたはオブジェクトキーの並べ替えに頼ることができないので、適切な並べ替えを実行する必要があります。アンダースコアを使用すると、_.sortByを使用することができます。

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

これは純粋なJSで行うことができます

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 
    }); 
関連する問題