簡體   English   中英

如何在沒有值的對象鍵中避免未定義?

[英]How to avoid undefined in object key with no value?

我正在嘗試迭代這樣的對象:

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”

怎么能避免這個? 有一種方法可以檢查當前密鑰是否包含值?

我可能會在訪問val之前再去檢查一下:

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

您可以嘗試以下方法。 如果val[0]不存在,它將被替換為空哈希,它將以undefined響應['id'] (但避免錯誤。)

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

嘗試檢查val[0]['id'])存在:

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

} 

檢查vallength屬性是否如此

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

現有的答案有效,但我想指出你的方法不是最優的事實:你迭代所有obj的所有屬性。

事實上你不需要這樣做; 您可以直接訪問unavailables屬性。 因此,您的整個代碼可以簡化為:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM