2017-03-08 59 views
0

所以前失蹤,我用這樣的代碼:檢查項目設置變量

$.ajax({ 
    url: 'php/parsedjson.php', 
    dataType: 'json', 
    success: function(data) { 
     $.each(data, function(index, val) { 
      var product_name = data[index].Thing[0].Name; 
      var pre_date = data[index].Another; 
      var hazard_name = data[index].Something[0].Name; 
      var remedies = data[index].Here[0].Name; 
      var retailers = data[index].Hello[0].Name; 
     }); 
    } 
}) 

這完美的作品,並將所有變量(我然後將它們附加到DOM,但我離開爲簡單起見)。

問題出現時,其中一個對象是缺少這些項目之一。例如,這將解析通過AJAX提供的5個嵌套JSON對象。其中一人可能會丟失data[index].Something[0].Name;。當然,這會阻止each運行並引發錯誤。

問題:有沒有一個快捷方式來檢查這些項目是否存在,而不必對每個項目執行if/else

回答

1

retoheusser的答案是正確的。然而,除非你已經在使用lodash,我認爲任何人都不應該把整個圖書館帶入他們的項目中去使用一種功能,特別是當它很容易編寫時。

雖然沒有一個原生的javascript快捷方式來滿足你的需求,但寫一個簡短的幫手就可以做你需要的東西。

function extract(obj, arry, def) { 
    for (key in arry) { 
    obj = obj[arry[key]]; 
    if (obj == null) 
     return def || {}; 
    } 
    return obj; 
} 

鑑於你的代碼,你可以像這樣使用它。

var product_name = extract(data, [index, 'Thing', 0, 'Name'], ''); 

我做了一個簡單的代碼筆例如http://codepen.io/raykrow/pen/yMgyJq?editors=0012

更新

或者,如果你想有一個更具吸引力的方法調用,不需要傳遞你可以使用默認這個。

function extract(obj) { 
    for (var i = 1; i < arguments.length; i++) { 
    obj = obj[arguments[i]]; 
    if (obj == null) 
     // return whatever best fits you for a 
     // default value 
     return {}; 
    } 
    return obj; 
} 

要等中使用:

var product_name = extract(data, index, 'Thing', 0, 'Name'); 

代碼筆例子是http://codepen.io/raykrow/pen/PpWwVE