2014-05-04 52 views
0

我正在編寫解析JSON文件的代碼。我想知道是否有一個快捷方式來檢查是否有任何對象爲空,並向其中的每一個返回「無信息」,以便我不必重複'+(item.xxx || 'No Information')+'。有沒有這樣的捷徑?快捷方式檢查JSON對象是否爲空

例如,我這樣做是爲了檢查對象爲null:

$(data.items).each(function (index, item) { 
    item_html +='<h3>'+item.title+'</h3><p>'+(item.description || 'No Information')+'<p>'+(item.date || 'No Information')+'<p>'+(item.source || 'No Information')+'<p>'+(item.month|| 'No Information')+'; 
} 

有沒有更好的選擇?

回答

2

jQuery有一個jQuery.isEmptyObject函數。

$(data.items).each(function (index, item) { 
    if (!jQuery.isEmptyObject(item)) { 
     item_html +='<h3>'+item.title+'</h3<p>'+item.description+'<p>'+item.date+'<p>'+item.source+'<p>'+item.month+'; 
    } 
} 

檢查每個屬性以查看它是否未定義仍然不是最壞的想法。嘗試從HTML建築物中取出邏輯,如var itemDate = item.date || "No Information";

您還有一些HTML和Javascript語法錯誤。關閉你的<p>標籤,並在行尾關閉你的字符串。

+0

我看不出這正是去上班,如果'item.description'是'null'或'undefined',你不會'不Information'結束 – juanpastas

2

寫一個簡單的函數

function s(item){ 
    if (item==null){ 
     return "No Inofrmation"; 
    }else{ 
     return item; 
    } 
} 

用法

$(data.items).each(function (index, item) { 
item_html +='<h3>'+item.title+'</h3><p>'+s(item.description)+'<p>'+s(item.date)+'<p>'+s(item.source)+'<p>'+s(item.month)'</p>'; 
} 
2

這可能是第一個版本:

var na = function(message, def){ 
    def || (def = 'No Information'); 
    return message || def; 
}; 

$(data.items).each(function (index, item) { 
    item_html +='<h3>'+item.title+'</h3><p>'+ 
    na(item.description)+'<p>'+ 
    na(item.date)+'<p>'+ 
    na(item.source)+'<p>'+ 
    na(item.month)+'<p>' 
} 

儘管它會更好,如果你在你的數據做邏輯來源,從哪裏得到data.items

+0

def應該默認或默認應該在你的函數def - 除了與我相同的思路+ 1 –

+0

是的,謝謝你的更正 – juanpastas

-1

這是排序的「黑客」,但你可以打印爲隨後替換未定義的所有ocurrences:

$(data.items).each(function (index, item) { 
    item_html +='<h3>'+item.title+'</h3><p>'+item.description+'<p>'+item.date+'<p>'+item.source+'<p>'+item.month; 
} 

item_html.split(">undefined<").join(">No Information<"); 
+0

永遠不會使用像這樣的黑客 - 所以使用分裂和連接,所以會發生什麼如果某些返回的信息實際上是未定義的 –