2016-03-13 127 views
1

我想數一下財產和秩序的對象通過考慮計數結果。Lodash orderBy根據財產兒童數

var users = [ 
      { 'user': 'fred', 'age': 48 }, 
      { 'user': 'barney', 'age': 34 } 
     ]; 

// Sort by `user` in ascending order and by `age` in descending order. 
     _.orderBy(users, ['user', 'age'], ['asc', 'desc']); 

從文檔,這工作,但我要的是有這樣的:

var users = [ 
      { 'user': 'barney', 'age': 34 ,Likes: [{objAA},{objBA}]}, 
      { 'user': 'fred', 'age': 48 ,Likes: [{objBA},{objBB},{objBC}]}, 
      { 'user': 'barney', 'age': 34 ,Likes: [{objDA},{objDA}]}, 
      { 'user': 'barney', 'age': 34 ,Likes: [{objCA}]} 
     ]; 

ORDERBY喜歡計數

var users = [ 
      { 'user': 'fred', 'age': 48 ,Likes: [{objBA},{objBB},{objBC}]}, 
      { 'user': 'barney', 'age': 34 ,Likes: [{objAA},{objBA}]}, 
      { 'user': 'barney', 'age': 34 ,Likes: [{objDA},{objDA}]}, 
      { 'user': 'barney', 'age': 34 ,Likes: [{objCA}]} 
     ]; 

這可能使用loadh只?

我需要的是像

_.orderBy(users, ['user.Likes.length'], ['desc']); 
_.orderBy(users, ['user.Likes'], ['desc']); 

但上面的代碼不工作,但沒有任何錯誤

我想用排序依據功能,可以後的順序結合像

_.orderBy(users, ['user.Likes','user', 'age'], ['desc','asc', 'desc']); 

回答

3

你可以使用函數迭代器這樣

_.orderBy(users, ['user', function (o) { 
    return o.likes.length; 
}], ["asc", "asc"]) 

這裏是一個例子

var users = [{ 
 
    'user': 'fred', 
 
    'age': 48, 
 
    'likes': [{c:1}, {c:2}, {c:3}] 
 
}, { 
 
    'user': 'barney', 
 
    'age': 34, 
 
    'likes': [{c:1}, {c:2}, {c:3}, {c:3}] 
 
}, { 
 
    'user': 'ammar', 
 
    'age': 25, 
 
    'likes': [{c:1}, {c:2}, {c:3}, {c:3}, {c:1}, {c:2}, {c:3}] 
 
}, { 
 
    'user': 'boston', 
 
    'age': 34, 
 
    'likes': [{c:1}, {c:3}] 
 
}, { 
 
    'user': 'obama', 
 
    'age': 34, 
 
    'likes': [{c:1}] 
 
}, { 
 
    'user': 'barney', 
 
    'age': 34, 
 
    'likes': [{c:1}, {c:2}, {c:3}] 
 
}]; 
 

 

 
document.write(JSON.stringify(_.orderBy(users, ['user', function (o) { 
 
    return o.likes.length; 
 
}], ["asc", "asc"]), null, 4))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.6.1/lodash.min.js"></script>

+0

感謝完美的工作! – Aaleks

2

您可以傳遞函數作爲迭代器:

_.orderBy(users, function(user) { return user.Likes.length; }, ['desc']);