2014-03-07 86 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