我如何使用underscore.js做一个asc和descsorting?
我目前使用underscorejssorting我的JSONsorting。 现在我要求使用underscore.js进行ascending
和descending
sorting。 在文档中我没有看到任何相同的内容。 我怎样才能做到这一点?
你可以使用.sortBy
,它会一直返回一个升序列表:
_.sortBy([2, 3, 1], function(num) { return num; }); // [1, 2, 3]
但是,您可以使用.reverse方法使其降序 :
var array = _.sortBy([2, 3, 1], function(num) { return num; }); console.log(array); // [1, 2, 3] console.log(array.reverse()); // [3, 2, 1]
或者在处理数字的时候添加一个负号给返回下降列表:
_.sortBy([-3, -2, 2, 3, 1, 0, -1], function(num) { return -num; }); // [3, 2, 1, 0, -1, -2, -3]
在.sortBy
使用内置的.sort([handler])
:
// Default is ascending: [2, 3, 1].sort(); // [1, 2, 3] // But can be descending if you provide a sort handler: [2, 3, 1].sort(function(a, b) { // a = current item in array // b = next item in array return b - a; });
使用下划线的降序可以通过将返回值乘以-1来完成。
//Ascending Order: _.sortBy([2, 3, 1], function(num){ return num; }); // [1, 2, 3] //Descending Order: _.sortBy([2, 3, 1], function(num){ return num * -1; }); // [3, 2, 1]
如果按stringsorting而不是数字sorting,则可以使用charCodeAt()方法获取unicode值。
//Descending Order Strings: _.sortBy(['a', 'b', 'c'], function(s){ return s.charCodeAt() * -1; });
Array原型的reverse方法修改数组并返回对它的引用,这意味着你可以这样做:
var sortedAsc = _.sortBy(collection, 'propertyName'); var sortedDesc = _.sortBy(collection, 'propertyName').reverse();
另外,下划线文档是这样写的:
此外, Array原型的方法通过链接的Underscore对象进行代理,因此您可以将
reverse
或push
入链中,然后继续修改数组。
这意味着您也可以在链接时使用.reverse()
:
var sortedDescAndFiltered = _.chain(collection).sortBy('propertyName').reverse().filter(_.property('isGood')).value();
与Underscore库类似,还有另一个名为“lodash”的库,它有一个“orderBy”方法,该方法接受参数以确定将其sorting的顺序。 你可以使用它
_.orderBy('collection', 'propertyName', 'desc')
出于某种原因,它没有logging在网站上的文档。