说 示例 我有一个排序功能,但我想根据另一个变量来反转它。
我所知道的
if
else
?
我想知道是否有类似(true && "return this")
或!!(+num % 2)
类似的酷炫技巧。
示例:
var array = [3,5,2,1,7,8,10];
var reverse = true;
array.sort( function(a,b) {
return a < b // somehow use reverse to sort it reverse order
});
附录
虽然大卫的答案是我在回答我的问题时所寻求的答案。如果我想要有条件地排序,我认为这是合适的:短路。
var array = [3,5,2,1,7,8,10];
var reverse = true;
function number_sort(a,b) {
return a > b ;
}
(array.sort(number_sort) && reverse && array.reverse());
console.log(array);
reverse = false;
(array.sort(number_sort) && reverse && array.reverse());
console.log(array);
答案 0 :(得分:2)
您可以使用变量asc
,其值true
可用于升序排序,false
可用于降序排序。然后使用asc
的值作为因子,如果给定,或使用-1
进行降序排序。
因子-1
会根据排序函数的需要反转排序顺序。
var array = [3, 5, 2, 1, 7, 8, 10],
asc = false;
array.sort(function(a, b) { return (asc || -1) * (a - b); });
console.log(array);
asc = true;
array.sort(function(a, b) { return (asc || -1) * (a - b); });
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
带有关于排序顺序的闭包的版本
var sortFn = function (asc) {
return function(a, b) {
return (asc || -1) * (a - b);
};
},
array = [3, 5, 2, 1, 7, 8, 10];
array.sort(sortFn(false)); // desc
console.log(array);
array.sort(sortFn(true)); // asc
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:2)
看到你刚刚从sort
返回一个布尔值,你可以返回布尔值,即布尔值是否与你的reverse
变量匹配:
array.sort( function(a,b) {
return a < b == reverse
});
答案 2 :(得分:2)
我会有条件地选择排序功能:
array.sort(reverse
? (a, b) => a - b
: (a, b) => b - a
);
优点是条件仅评估一次而不是每个项目。
否则,很明显:
array.sort(...);
if (reverse) {
array.reverse();
}
答案 3 :(得分:0)
您也可以使用三元运算符:
var array = [3,5,2,1,7,8,10];
var reverse = true;
array.sort( function(a,b) {
return reverse ? (a > b) : (a < b)
});