1

我需要找到一种更有效的方法来访问 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 = " "
        }

有什么帮助吗?

凯文

4

2 回答 2

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") || " ";
}
于 2013-02-26T22:07:52.517 回答
0

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

for (i in oMilestone) {
   if (oMilestone.hasOwnProperty(i) && !oMilestone[i]) {
        oMilestone[i] = " "; //covers undefined, null and ""
   } 
}
于 2013-02-26T21:37:55.443 回答