2016-03-13 47 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']);