基于变量反转布尔值

时间:2017-05-23 12:52:12

标签: javascript

示例 我有一个排序功能,但我想根据另一个变量来反转它。

我所知道的

  • 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);

4 个答案:

答案 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)
});