有一个很不错的方法可以根据几个属性对对象数组进行排序:
var data = _.sortBy(array_of_objects, ['type', 'name']);
但是,这仅用于升序排序。有一些方便的方法来定义每列的方向吗?例如
var data = _.sortBy(array_of_objects, [{'type': 'asc'}, {'name': 'desc'}]);
从lodash 3.5.0开始,您可以使用sortByOrder(在v4.3.0中重命名为orderBy):
var data = _.sortByOrder(array_of_objects, ['type','name'], [true, false]);
从3.10.0版本开始,您甚至可以使用标准语义进行排序(asc,desc):
var data = _.sortByOrder(array_of_objects, ['type','name'], ['asc', 'desc']);
在lodash的版本4中,此方法已重命名为orderBy:
var data = _.orderBy(array_of_objects, ['type','name'], ['asc', 'desc']);
您可以随时使用 Array.prototype.reverse()
var data = _.sortBy(array_of_objects, ['type', 'name']).reverse();
值得注意的是,如果要对特定属性进行降序排序,则不想在结尾处简单地附加.reverse(),因为这会使所有排序降序。
要使特定的排序降序,请将排序从最低有效到最高有效,在要降序的每种排序后调用.reverse()。
var data = _(data).chain()
.sort("date")
.reverse() // sort by date descending
.sort("name") // sort by name ascending
.result()
由于_的排序是稳定的排序,因此可以安全地链接和反向排序,因为如果两个项目的属性值相同,则将保留其顺序。
深场,多场和不同方向的排序Lodash> 4
var sortedArray = _.orderBy(mixedArray,
['foo','foo.bar','bar.foo.bar'],
['desc','asc','desc']);
有一些方便的方法来定义每列的方向吗?
不能。您不能指定排序顺序,只能通过使值反向的回调函数来指定。对于多列排序,这甚至是不可能的。
您可能能够做到
_.each(array_of_objects, function(o) {
o.typeDesc = -o.type; // assuming a number
});
_.sortBy(array_of_objects, ['typeDesc', 'name'])
对于其他所有内容,您将需要.sort()
使用自定义比较功能求助于本机:
array_of_objects.sort(function(a, b) {
return a.type - b.type // asc
|| +(b.name>a.name)||-(a.name>b.name) // desc
|| …;
});
在版本4.11.x的文档中说:`“此方法类似于_.sortBy,不同之处在于它允许指定要迭代的迭代对象的排序顺序。如果未指定顺序,则所有值都以升序排序。否则,请将相应值的降序指定为“ desc”或将其升序指定为“ asc”。(来源https://lodash.com/docs/4.17.10#orderBy)
let sorted = _.orderBy(this.items, ['fieldFoo', 'fieldBar'], ['asc', 'desc'])
您也可以尝试以下操作:
var data= _.reverse(_.sortBy(res.locals.subscriptionList.items, ['type', 'name']));
本文地址:http://javascript.askforanswer.com/lodashduoliepaixuanjiangxu.html
文章标签:javascript , lodash , sorting
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
文章标签:javascript , lodash , sorting
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
评论已关闭!