检查数组元素是否已定义的简写

时间:2014-05-07 05:46:15

标签: javascript jquery arrays json

我正在尝试在解码的JSON数组中添加一堆元素:

var jqXHR = $.getJSON("data.php", function(jsonData) {
    newItems      = jsonData['New']['count'] || 0;
    unsolvedItems = (jsonData['New']['count'] || 0)+
                    (jsonData['b']['count'] || 0)+
                    (jsonData['c']['count'] || 0)+
                    (jsonData['d']['count'] || 0)+
                    (jsonData['e']['count'] || 0)+
                    (jsonData['f']['count'] || 0)+
                    (jsonData['g']['count'] || 0);
}

正如您所看到的,我正在尝试检查['count']元素是否存在,然后我尝试将值分配给某些内容,使用的是on this site解释的简写,但是|| 0速记似乎不起作用。当['New']未包含在JSON中时,我会获得Uncaught TypeError: Cannot read property 'count' of undefined

这不适用于数组,还是我做错了?如果它不起作用,除了对我想要使用的每个元素使用单独的if语句之外还能做什么?

2 个答案:

答案 0 :(得分:2)

问题是如果jsonData['d']['count']jsonData['d'],则无法获得undefined

您的代码也充满了重复。这种代码很难维护。

你可以这样做:

unsolvedItems = 0;
['New','b','c','d','e','f','g'].forEach(function(key){
    if (jsonData[key]) unsolvedItems += jsonData[key].count || 0;
});

答案 1 :(得分:0)

我通常选择的模式:

jsonData['b'] && jsonData['b']['count'] || 0