基于属性子项数量的 Lodash orderBy

5
我希望能够根据属性计算对象数量并按照计数结果排序。
 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}]}
        ];

按照点赞数排序
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']);
2个回答

8
您可以像这样使用函数迭代器:

你可以像这样使用函数迭代器

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


4
您可以将函数作为迭代器传递:
_.orderBy(users, function(user) { return user.Likes.length; }, ['desc']);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接