检查JSON对象是否为空的快捷方式

时间:2014-05-04 16:53:28

标签: javascript jquery json

我正在编写一个代码来解析JSON文件。我想知道是否有一个快捷方式来检查是否有任何对象为空并向每个对象返回“无信息”,这样我就不必重复'+(item.xxx || 'No Information')+'。有这样的捷径吗?

例如,我这样做是为了检查对象是否为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')+';
}

还有更好的选择吗?

5 个答案:

答案 0 :(得分: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>标记,并在该行的末尾关闭字符串。

答案 1 :(得分:2)

写一个简单的函数

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

USAGE

$(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 :(得分: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>'
}

虽然在数据源中执行此逻辑会更好,但是从{Q}获得{<1}}?

答案 3 :(得分:1)

您也可以使用map命令预处理数组。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

var fields = ['title', 'field1', 'flield2'];
items.map(function(item){
    for(var f in fields){
        fn = fields[f];
        if(item[fn] == undefined || item[fn] == null){
            item[fn] = 'No Information';
        }
    }
});

答案 4 :(得分:-1)

这是一种&#34; hack&#34;但你可以按原样打印然后替换undefined的所有发生:

$(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<");