如何使用值查找唯一的对象属性

时间:2013-05-01 02:03:41

标签: jquery object

当进行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();
};

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

我认为你也是创造这个对象的人,对吧?为什么不简单地向对象添加一个属性来告诉你它的用途呢?

例如,如果通过从PHP回显JSON来创建对象,则可以添加“type”属性:

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

这样,渲染函数变为:

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

如果您是对象的作者,则可以使您不必遍历属性以找出您应该已经知道的内容。如果您使用的是无法控制的对象,那么Daniel的解决方案就应该这样做。