将Coffeescript中的true和false分别转换为1和-1

时间:2011-12-22 19:38:24

标签: javascript jquery coffeescript code-golf

if x < change.pageX # pageX is cross-browser normalized by jQuery
            val = Number(elem.text())
            return elem.text(o.max) if val + o.step > o.max
            return elem.text(o.min) if val + o.step < o.min
            elem.text(val + o.step)
else x > change.pageX
  # same thing, only - instead of +

(咖啡脚本,但你明白了)。我正在寻找一个获取布尔值并将其转换为1(真)或-1(假)的技巧。这样我可以val + converted_bool * o.step并保存if。

7 个答案:

答案 0 :(得分:9)

你可以这样做......

+x||-1

  • 如果x===true,则+x1-1已短路。

  • 如果x===false+x0,则会返回-1


这是另一种方式......

[-1,1][+x]
  • 如果x===true[+x]将获取数组的索引1

  • 如果x===false[+x]将获取数组的索引0

答案 1 :(得分:5)

听起来像conditional (ternary) operator

的工作
if true then 1 else -1
1
if false then 1 else -1
-1

答案 2 :(得分:1)

我觉得这样会起作用:

b2i = (x) -> if x then 1 else -1
b2i(true)  # => 1
b2i(false) # => -1

该函数定义将导致(不是非常令人兴奋)JavaScript:

var b2i;

b2i = function(x) {
  if (x) {
    return 1;
  } else {
    return -1;
  }
};

注意,CoffeeScript ?是存在操作符,所以

x ? 1 : -1

将转换为smth有点意外

if (typeof x !== "undefined" && x !== null) {
  x;
} else {
  ({ 1: -1 });
};

答案 3 :(得分:1)

(~_ true)+3和(~false)会给你1和负1:)

答案 4 :(得分:0)

你在寻找除了这个简单的javscript之外的任何东西:

boolVal ? 1 : -1

或者,以函数形式:

function convertBool(boolVal) {
    return(boolVal ? 1 : -1);
}

涉及布尔值的直接数学将true转换为1,将false转换为0

var x,y;
x = false;
y = 2;
alert(y + x);  // alerts 2

x = true;
y = 2;
alert(y + x);  // alerts 3

如果感兴趣的话,这里提供的答案中有四种jsperf test作为答案。在Chrome中,三元解决方案的速度提高了7倍以上。

答案 5 :(得分:0)

啊哈!

2 * (!!expression) - 1

答案 6 :(得分:0)

您也可以在coffeescript中输入javascript:

foo = `bar ? 1 : -1`
相关问题