2016-03-13 6 views
1

Я хотел бы считать объекты недвижимости и orderBy учитывая результат подсчета.Lodash orderBy на основе имущества child count

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 Любит COUNT

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, чтобы иметь возможность после того, как совместить заказ как

_.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

Вы можете передать функцию как iteratee:

_.orderBy(users, function(user) { return user.Likes.length; }, ['desc']); 
Смежные вопросы