2016-12-10 15 views
0

私はオブジェクト属性と子属性でソートする必要がありますが、これを処理するにはより良い方法があります。子属性を持つLodash OrderBy

const testData=[{id:1,name:"test",notes:"test notes",child:[{name:"weight",value:3},{name:"category",value:"testCategory"},{name:"amount",value:2}]},{id:2,name:"test2",notes:"test notes2",child:[{name:"weight",value:4},{name:"category",value:"testCategory"},{name:"amount",value:3}]}] 

私は

_.orderBy(testData,['notes'],[asc]) 
_.orderBy(testData,(t)=>{ 
       return _.filter(t.child, (c)=> { 
          return c.name == "category" 
         })[0]['value'] 

      } 

の下にど​​のように単一のOrderBy

+0

「'user'を参照のlodashの例昇順にと「年齢が降順になる」https://lodash.com/docs/#orderBy –

+0

はい、違いは属性のレベルが親レベルですその他は子レベルです単一の配列で結合する方法は? – Kamaraju

答えて

1

使用いくつかのアイデンティティイテレータ

_.orderBy(
    testData, 
    [ 
     'notes', 
     function(item) { 
      return _.chain(item).get('child').find({name: 'category'}).get('value').value(); 
     } 
    ], 
    ['asc', 'desc'] 
); 
+0

同じ問題です、それは2番目の属性でソートしません – Kamaraju

+0

フィドルが動作していないことを表示するhttps://jsfiddle.net/Kamaraju333/359dysrg/ – Kamaraju

+0

@Kamarajuはフィドルであなたのデータには 'child'キーはありません – stasovlas

1
でそれらの両方を組み合わせることのように個別にそれを知っている名前(ASC)とカテゴリ(降順)

でソートする必要があります

iteratee関数を使用して、の注文データを作成します。その後、

我々が想定できる場合たとえば、.child呼ばカテゴリがあるでしょう

_.orderBy(testData, data => { 
    return [ 
     data.notes, 
     data.child.find(child => child.name === 'category').value 
    ]; 
}, ['asc', 'desc']); 
関連する問題