2013-05-01 61 views
0

當進行jQuery ajax調用時,生成的jqXHR變量data傳遞到下面的呈現函數renderData。該函數通過填充$type對象的屬性中的一個來確定數據的來源。如何找到具有值的唯一對象屬性

什麼是一個很好的方法來找出哪些屬性被填充,反過來數據來自哪裏?

function renderData(data){ 
    var $type = { 
     contact : $(data).filter('#contact'), 
     details : $(data).find('#details'), 
     other : $(data).find('#other') 
    }; 
    // Get the populated property and store its value in "endResult" 
    endResult.appendTo('#wrapper').hide().fadeIn(); 
}; 
+0

爲什麼downvote? – verism 2013-05-01 02:08:45

+0

更正,似乎是個好問題。 – 2013-05-01 02:52:23

回答

1

我可能會使用一個for...in循環找到屬性,並以功能封裝它。

jsFiddle

var type1 = { 
    contact : 'a', 
    details : undefined, 
    other : undefined 
}; 

var type2 = { 
    contact : undefined, 
    details : undefined, 
    other : 'b' 
}; 

var type1Prop = getPopulatedProperty(type1); 
alert(type1Prop + ' = ' + type1[type1Prop]); 
var type2Prop = getPopulatedProperty(type2); 
alert(type2Prop + ' = ' + type2[type2Prop]); 

function getPopulatedProperty(obj) { 
    for (var prop in obj) { 
     if (obj[prop] !== undefined && obj[prop] !== null && obj[prop] !== '') { 
      return prop; 
     } 
    } 
    return undefined; 
} 
+0

謝謝 - 我對這種情況有困難,但這正是我所追求的。 – verism 2013-05-01 12:01:59

+0

更正 - 我認爲這是正確的答案,但由於某種原因,第一個屬性總是由'getPopulatedProperty()'返回。控制檯告訴我它有值[對象對象] – verism 2013-05-01 12:23:40

+0

你需要改變你的條件在函數中,然後即使它們是空的,它們仍然是對象。該函數假定爲空的屬性需要是未定義的,null或空字符串。 – 2013-05-01 21:51:37

1

我相信你是一個創建對象,以及,對不對?爲什麼不簡單地向對象添加一個屬性,告訴你它是幹什麼的?

舉例來說,如果你從PHP呼應JSON創建對象,你可以添加一個 「類型」 屬性:

echo('{"type": "contactForm", ...your data goes here}'); 

這樣一來,你的渲染函數變爲:

function renderData(data){ 
    var $type = data.type; 
    ... 
}; 

保存如果你是對象的作者,你不必遍歷屬性來找出你應該已經知道的東西。如果你使用的是你無法控制的物體,丹尼爾的解決方案應該這樣做。

相關問題