如何使用$ .each在javascript对象中检查null?

时间:2013-02-26 21:36:24

标签: jquery json

我需要找到一种更有效的方法来访问javascript对象,找到空值并用空字符串(或其他内容)替换它们。这就是我所拥有的,它的功能,但我需要一种更有效的方法,我只知道必须有一个使用$ .each,但我似乎无法弄明白。

这是有效的...我想用更优雅的东西替换所有if语句?

        var oMilestone = {
            sTitle: $(this).attr("ows_Title"),
            sStatus: $(this).attr("ows_Status"),
            sOwner: $(this).attr("ows_Assigned_x0020_Owner"),
            sStart: SPConvertDate($(this).attr("ows_Start_x0020_Date")),
            sDue: SPConvertDate($(this).attr("ows_Due_x0020_Date")),
            sPercent: $(this).attr("ows_Percent_x0020_Complete"),
            sComments: $(this).attr("ows_Update_x0020_Comments")
        }
        if (oMilestone.sOwner == null) {
            oMilestone.sOwner = " "
        }
        if (oMilestone.sStart == null) {
            oMilestone.sStart = " "
        }
        if (oMilestone.sDue == null) {
            oMilestone.sDue = " "
        }
        if (oMilestone.sPercent == null) {
            oMilestone.sPercent = " "
        }
        if (oMilestone.sComments == null) {
            oMilestone.sComments = " "
        }

任何帮助?

凯文

2 个答案:

答案 0 :(得分:0)

使用for...in迭代属性。见下文,

for (i in oMilestone) {
   if (oMilestone.hasOwnProperty(i) && !oMilestone[i]) {
        oMilestone[i] = " "; //covers undefined, null and ""
   } 
}

答案 1 :(得分:0)

我的回答不使用$.each

但你总是可以编写一个内联的小帮助函数,它可以访问$(this)。 保存自己的重复。

function attrOrDefault(attribute) {
    return $(this).attr("ows_Title") || " ";
}

var oMilestone = {
    sTitle: attrOrDefault("ows_Title"),
    sStatus: attrOrDefault("ows_Status"),
    sOwner: attrOrDefault("ows_Assigned_x0020_Owner"),
    sStart: SPConvertDate($(this).attr("ows_Start_x0020_Date")),
    sDue: SPConvertDate($(this).attr("ows_Due_x0020_Date")),
    sPercent: attrOrDefault("ows_Percent_x0020_Complete"),
    sComments: attrOrDefault("ows_Update_x0020_Comments")
}

或者如果你认为你会经常使用它,那么可以扩展jQuery以拥有这个功能?

$.fn.attrOrDefault = function(attribute) {
    return this.attr("ows_Title") || " ";
}