2012-04-27 56 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