我试图迭代这样的对象:
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'未定义的
怎么能避免这个?有一种方法可以检查当前密钥是否包含值?
答案 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);
}
});