2012-04-27 52 views
2

我想实现这个:用JavaScript写这篇文章的最短路线?

//foo is a boolean 
if(foo){ 
    count++; 
} else { 
    count--; 
} 

怎么可能我写这篇文章有一个班轮?

+2

较少的代码并不总是更好(除非你唯一的标准是“较好”,而不是代码,这是不明智的)。但在这种情况下,提供的三元操作之一可能是最好的。 – RobG 2012-04-27 05:28:30

回答

9

试试这个:

count += foo ? 1 : -1 
1

你可以把foo为数字,特别是10

count += 2 * foo - 1; 
+3

除了这段代码完全不可读... – 2012-04-27 04:28:39

+0

真的吗?我觉得它可读。 – Blender 2012-04-27 04:32:53

+0

OP确实要求“最短”的方式(在问题的标题中),而不是一个可读的简短答案。就我个人而言,我发现hkf的答案是最易读的,这可能是我如何做的,因为我很重视简洁性(对于那些不得不花费大量时间来处理/修复其他人的代码的人来说,情况就是这样)。 – jfriend00 2012-04-27 04:50:48

0
count = (foo) ? count+1 : count-1; 
+1

'count ++'和'count - '在这里会更有意义,然后你甚至不需要赋值。 – jfriend00 2012-04-27 04:54:21

+0

同意。但是,性能的任何改进都会在那里? – sgowd 2012-04-27 05:16:30

0

请试试这个:

foo ? count++ : count--; 
+0

你不需要指定'count'。 'count ++'和'count - '已经处理好了。 – jfriend00 2012-04-27 04:51:19

+0

哦,是的。我正在纠正它。 – sarwar026 2012-04-27 10:16:24

3

简单的方法是让你现在拥有并转换成三元逻辑:

count += foo ? 1 : -1;

11

foo ? count++ : count--;

这就是所谓的三元运算符,请参阅Operator precedence with Javascript Ternary operator

最简单的解释是: if this ? then this : else this

+0

在ES5中,它被称为* [条件操作符(?:)](http://es5.github.com/#x11.12)*,尽管它通常被称为*三元表达式*或*三元操作* – RobG 2012-04-27 04:47:53

+0

就像这个,因为它既简洁又清晰,我认为它比Nikhil的答案更容易阅读。我个人认为简洁明了。如果你花费大量时间在其他人的代码上工作,你也会重视清晰度。 – jfriend00 2012-04-27 04:52:53

5

使用short-circuit evaluation和javascript dynamic typing这应该是最短的:

count += foo || -1; 
+0

你假设'foo'的计算结果为1,没有理由假设来自OP,如果'foo = 12'或'foo = {...}'怎么办? – RobG 2012-04-27 05:26:24

+0

来自OP的引文:'// foo是一个布尔值' – KooiInc 2012-04-27 05:38:41

+1

好的,错过了评论。尽管如此,仍然是一种风险。 – RobG 2012-04-27 05:49:34