我如何使用underscore.js做一个asc和descsorting?

我目前使用underscorejssorting我的JSONsorting。 现在我要求使用underscore.js进行ascendingdescendingsorting。 在文档中我没有看到任何相同的内容。 我怎样才能做到这一点?

你可以使用.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对象进行代理,因此您可以将reversepush入链中,然后继续修改数组。

这意味着您也可以在链接时使用.reverse()

 var sortedDescAndFiltered = _.chain(collection).sortBy('propertyName').reverse().filter(_.property('isGood')).value(); 

与Underscore库类似,还有另一个名为“lodash”的库,它有一个“orderBy”方法,该方法接受参数以确定将其sorting的顺序。 你可以使用它

 _.orderBy('collection', 'propertyName', 'desc') 

出于某种原因,它没有logging在网站上的文档。