2015-10-20 65 views
1

有沒有辦法減少這個代碼中「if」的數量?如何減少if的數量

function test(input) { 
    if ((input % 3 == 0) && (input % 5 == 0)) { 
    return 'fizzbuzz'; 
    } else if (input % 3 == 0) { 
    return 'fizz'; 
    } else if (input % 5 == 0) { 
    return 'buzz'; 
    } else { 
    return '' + input; 
    } 
} 


for (var i = 1; i < 100; i++) { 
    console.log(test(i)); 
} 
+3

這個問題屬於上http://codereview.stackexchange.com/ – forgivenson

回答

0

如果您不想使用if爲什麼不嘗試case語法?

http://www.w3schools.com/js/js_switch.asp

另外也可以使用JS簡寫如果

使得:

var something; 

if (2 + 2 === 4){ 
something = "Yup!" 
} else { 
something = "Nope" 
} 

變得

var something = 2 + 2 === 4 ? "Yup!" : "Nope"; 
3

可以避免通過存儲比較值:

var mod3 = input % 3 == 0; 
var mod5 = input % 5 == 0; 

...創建查找表...

var outs = [input, "fizz", "buzz", "fizzbuzz"]; 

...和索引它...

return outs[(+mod3) + 2 * (+mod5)]; 

...沒有if小號!

+0

點創意,但高度的對象時增加更多的條件與斷裂。 – ergonaut

+2

@ergonaut FizzBu​​zz是一個非常*舊的挑戰。我懷疑它會真的「改變」。 –

+0

我從來沒有聽說過這個,顯然它從未被提升爲Hello World狀態。 – ergonaut

1

您可以使用三元運算:

return ((input%3==0)&&(input%5==0)) ? 'fizz buzz' 
     : (input%3==0) ? 'fizz' 
     : (input%5==0) ? 'buzz' 
     : '' + input; 
+0

這只是一個if。 –

+0

@BartekBanachewicz:從技術上講,它根本不是一個「if」,儘管它是一個可以替代「if/else」語句的表達式。他沒有說他想減少條件的數量,只是「if」的數量。 – 2015-10-20 16:44:33

0

可以擺脫的第一個「如果」完全的,因爲3,5與「嘶嘶」和「嗡嗡」在後來的使用。您也可以等到返回結束。喜歡的東西:

var str = ""; 

if (input % 3 === 0){ 
    str +="fizz"; 
} 

if (input % 5 === 0){ 
    str +="buzz"; 
} else { 
str = input; 
} 

return str; 
+0

你永遠不會單靠「嘶嘶聲」。這將始終是「嗡嗡聲」,「fizzbuzz」或「輸入」。 – 2015-10-20 16:40:31