Javascript 将Coffeescript中的true和false分别转换为1和-1
咖啡剧本,但你明白了。我正在寻找一个技巧,将布尔值转换为1真或-1假。这样我就可以执行val+converted\u bool*o.step并保存一个if。听起来像是一个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: 如果对性能感兴趣,这里有四种方法的答案。在铬中,三元溶液的速度
除了这个简单的脚本之外,您还需要什么:
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`