2014-03-07 87 views
-1

我從後端獲取一些大的json數據,並且我必須檢查數據兩次,然後才能使用該數據。在嵌套if我的代碼工作正常我想改變嵌套ternary條件。下面是我的代碼(Fiddle如何以更優化的方式編寫嵌套三元運算符

JS:

var x = /* Some big JSON data */,fx,yy; 
if(x){ 
    yy = $.parseJSON(decodeURIComponent(x)); 
    yy ? fx = yy.products.length : fx =0; 
}else{ 
    fx = yy = 0; 
} 

這是我還沒有試過(不工作):

x ? ($.parseJSON(decodeURIComponent(x)),(yy ? fx = yy.products.length : fx =0;)) : (fx = yy = 0); 

這是Fiddle

+2

你正試圖用一些非常複雜的東西來代替一些有效的東西,並且你理解的東西太難以理解了。請問,你爲什麼認爲這是一個好主意? – Jon

+0

隨着困難和複雜的情況,最好使用'if else'而不是'ternary' – tnanoba

+3

爲什麼你認爲在一行上取得所有內容意味着它是「優化的」? –

回答

2

坦率地說,它會這樣寫得好多了

var x = /* whatever */, fx = 0, yy = 0; 

if (x && yy = $.parseJSON(decodeURIComponent(x))) { 
    fx = yy.products.length; 
} 

這是立即清晰的讀者。

另一種方式把它與慣用的Javascript(仍然沒有三元運算符)寫會

var x = /* whatever */, yy, fx; 
yy = $.parseJSON(decodeURIComponent(x)) || 0; 
fx = (yy && yy.products.length) || 0; 

,你也可以通過yyfx的聲明與分配相結合寫一行。這是一個低於三元運算符的語句,所以如果你正在爲語句計數「優化」,爲什麼不這樣做呢?

+0

'0 ||'不是慣用的,可以省略。你是不是指'|| 0'? – Bergi

+0

@Bergi:當然,謝謝你的提高。 – Jon