Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将Coffeescript中的true和false分别转换为1和-1_Javascript_Jquery_Coffeescript_Code Golf - Fatal编程技术网

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

Javascript 将Coffeescript中的true和false分别转换为1和-1,javascript,jquery,coffeescript,code-golf,Javascript,Jquery,Coffeescript,Code Golf,咖啡剧本,但你明白了。我正在寻找一个技巧,将布尔值转换为1真或-1假。这样我就可以执行val+converted\u bool*o.step并保存一个if。听起来像是一个 除了这个简单的脚本之外,您还需要什么: if true then 1 else -1 1 if false then 1 else -1 -1 或者,以函数形式: boolVal ? 1 : -1 涉及布尔值的直接数学将true转换为1,将false转换为0: 如果对性能感兴趣,这里有四种方法的答案。在铬中,三元溶液的速度

咖啡剧本,但你明白了。我正在寻找一个技巧,将布尔值转换为1真或-1假。这样我就可以执行val+converted\u bool*o.step并保存一个if。

听起来像是一个


除了这个简单的脚本之外,您还需要什么:

if true then 1 else -1
1
if false then 1 else -1
-1
或者,以函数形式:

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

如果对性能感兴趣,这里有四种方法的答案。在铬中,三元溶液的速度快7倍以上。

啊哈


2*!!表达式-1类似于这样的表达式将起作用:

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

x = true;
y = 2;
alert(y + x);  // alerts 3
该函数定义将导致不太令人兴奋的JavaScript:

b2i = (x) -> if x then 1 else -1
b2i(true)  # => 1
b2i(false) # => -1
注意咖啡脚本?存在算子是这样吗

var b2i;

b2i = function(x) {
  if (x) {
    return 1;
  } else {
    return -1;
  }
};
将转换为smth有点意外,因为

x ? 1 : -1

~true+3和~false分别为1和负1:

你可以这样做

if (typeof x !== "undefined" && x !== null) {
  x;
} else {
  ({ 1: -1 });
};
如果x==真,则+x为1,-1短路

如果x==false,则+x为0,返回-1

还有另一种方法

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

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


您还可以在coffeescript中键入javascript:

[-1,1][+x]

为什么要用这个来代替上面的三元示例呢?如果表达式可以保证是布尔表达式,那么就不需要了!!铸造就这样:2*表达式-1在咖啡脚本中为假?1:-1返回false。问题是JavaScript。CoffeeScript中的Ternaries只使用if/then/else:如果为true,则使用1 else-1。@Trevor Burnham-我说的不是说,问题标题已被编辑。您需要一个附加条件来选择要使用的表达式。玩得好,先生。打得好。我在做索引时用这个。。。如果~xyz.indexofy在我的答案中添加了jsperf测试,比较了许多提供的解决方案的性能:。第二种方法是纯JS吗?还是涉及coffescript?@ajax333221:他们都是纯JS。这个[-1,1]创建一个包含两个成员的数组,如果为false,+x将x布尔值转换为0,如果为true,则转换为1。因此[+x]正在获取[-1,1]数组的索引0或1……但它也是有效的CoffeeScript语法。为什么不使用纯CoffeeScript呢?foo=如果是条,那么1 else-1问题被标记为“代码高尔夫”,这表明一个紧凑的解决方案是令人感兴趣的。
if (typeof x !== "undefined" && x !== null) {
  x;
} else {
  ({ 1: -1 });
};
+x||-1
[-1,1][+x]
foo = `bar ? 1 : -1`