使用lodash/下划线聚合排序限制
aggregate sort limit with lodash/underscore
我需要聚合我的数据。如果我使用mongodb聚合,这会很容易,但我想在客户端执行。LoDash或Undercore应该解决这个问题。。。
假设我有这个数据:
var data = [
{
"uId" : "u1",
"qId" : "q1",
"share" : 2,
"star" : 2,
"score" : 5
},
{
"uId" : "u1",
"qId" : "q2",
"share" : 2,
"star" : 2,
"score" : 5
}.
{
"uId" : "u2",
"qId" : "q1",
"share" : 2,
"star" : 2,
"score" : 5
},
{
"uId" : "u2",
"qId" : "q2",
"share" : 3,
"star" : 3,
"score" : 7
},
{
"uId" : "u3",
"qId" : "q1",
"share" : 3,
"star" : 3,
"score" : 7
},
{
"uId" : "u3",
"qId" : "q2",
"share" : 3,
"star" : 3,
"score" : 7
}
]
我需要这个结果:
result = [
{
"uId" : "u3",
"qId" : 2,
"share" : 6,
"star" : 6,
"score" : 14
},
{
"uId" : "u2",
"qId" : 2,
"share" : 5,
"star" : 5,
"score" : 12
}
]
它按最高分数排序,并将结果限制为仅显示2个结果
谢谢。。。
您也可以在下划线中执行此操作。
_.sortBy(data, 'score').reverse().splice(0, 2);
但不确定反过来会有多好的表现。
编辑:
得到了它没有反向:
_.sortBy(data, function (el) { return -el.score; }).splice(0, 2);
您可以使用lodash:
_.map(_.sortByOrder(data, ['score'], ['desc']), _.values).slice(0,2);
首先,它将创建一个排序数组,然后将结果限制为只有两个结果。
相关文章:
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- Lodash 在 JavaScript 中对对象数组进行排序
- lodash-sortby,如何将数字排序晚于字母
- 使用 lodash 按多个字段对数组中的项目进行排序
- Js lodash 按更深的字段排序
- 使用 Lodash 对数字字符串数组进行排序
- 使用lodash按父id对平面列表进行排序
- 使用lodash/下划线聚合排序限制
- 按Lodash 2.x中的多个字段排序
- JS Lodash:按值对对象进行排序,最后为null
- 在ReactJS上使用Lodash对映射列表进行排序
- 如何防止lodash mapKeys重新排序我的数组
- 在node.js中使用lodash对json属性进行排序时,ReferenceError: _没有定义
- 使用lodash按属性合并2个排序的对象数组
- 在AngularJS的ng-repeat中,使用Underscore/Lodash按值将对象排序为一对数组
- 如何使用Lodash在数字数组的数组中按位置排序
- 如何使用lodash/underscore按多个嵌套字段排序?
- 使用LoDash对Json数组进行排序
- lodash 多列排序依据
- 使用lodash将对象数组排序为Top N,其中N +1为“other "”