2013-02-26 77 views
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

這些值不能爲空,'.attr()'將返回字符串或'undefined' .. – 2013-02-26 21:38:34

回答

0

使用for...in遍歷性。見下,

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

這會影響原型屬性以及 – 2013-02-26 21:39:59

+0

未定義,爲null假,0 「」, NaN – 2013-02-26 21:40:50

+0

@Asad謝謝..更正。毫米將刪除我的..但似乎你刪除了你的。 – 2013-02-26 21:42:43

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") || " "; 
} 
+0

沿着這些相同的行的另一個選項是'... sTitle:$(this).attr(「ows_Title」)|| 「」,...' – 2013-02-26 22:12:19

+0

@KevinB ooooo我喜歡它;之前沒有這樣做過。我已更新我的答案以使用單行版本。這看起來是否適合你? – 2013-02-26 22:17:57

+0

是的,假設'this'是一個jQuery對象(它會在你的情況下,我錯過了你使它成爲一個插件的事實) – 2013-02-26 22:18:55