如何在没有值的对象键中避免未定义?

时间:2015-10-22 11:46:50

标签: javascript

我试图迭代这样的对象:

0: Object
appointments: Array[2]
unavailables: Array[2]
0: Object
1: Object
book_datetime: "2015-10-22 02:46:23"
data: "0"
end_datetime: "2015-10-22 13:00:00"
hash: null
id: "21"
id_google_calendar: null
id_services: null
id_users_customer: null
id_users_provider: "87"
is_unavailable: "1"
notes: "Nessuna"
resource_id: "0"
start_datetime: "2015-10-22 12:00:00"
__proto__: Object
length: 2
__proto__: Array[0]
__proto__: Object
1: Object
appointments: Array[1]
unavailables: Array[0]
length: 0
__proto__: Array[0]
__proto__: Object
length: 2
__proto__: Array[0]

以这种方式:

$.each(response, function(_, obj) 
{
        $.each(obj, function(key, val) 
        {
                if (key === 'unavailables') 
                {
                        console.log("=> ", val[0]['id']);
                }
        });
});

现在一切正常但你怎么看第二个数组包含unavailables length = 0,当循环在这里时我得到了

  

无法阅读属性' id'未定义的

怎么能避免这个?有一种方法可以检查当前密钥是否包含值?

5 个答案:

答案 0 :(得分:2)

在访问val之前,我可能会再次进行检查:

if (key === 'unavailables' && val && val.length) 
{
    console.log("=> ", val[0]['id']);
}

答案 1 :(得分:0)

您可以尝试以下操作。如果val[0]不存在,则会将其替换为空哈希,这将使用['id']响应undefined(但避免错误。)

(val[0] || {})['id']

答案 2 :(得分:0)

尝试检查val[0]['id'])是否存在:

if (key === 'unavailables' && val[0]['id'])){

} 

答案 3 :(得分:0)

检查val的{​​{1}}属性是否为

if (val.length > 0) {
   console.log("=> ", val[0]['id']);
} else {
   // contains no value
}

答案 4 :(得分:0)

现有的答案有效,但我想指出你的方法不是最优的事实:你迭代所有obj的所有属性。

事实上你不需要这样做;您可以直接访问unavailables属性。因此,您的整个代码可以简化为:

$.each(response, function(_, obj) 
{
  var val = obj.unavailables;

  if (val && val[0]) {
    console.log("=> ", val[0].id);
  }
});