2013-05-01 2 views
0

Когда выполняется вызов ajax jQuery, полученная переменная 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

+0

Исправлено, похоже на вопрос OK. –

ответ

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

+0

Коррекция - я думал, что это правильный ответ, но по какой-то причине первое свойство всегда возвращается 'getPopulatedProperty()'. Консоль сообщает мне, что у нее есть значение [object Object] – verism

+0

Вам нужно изменить свое состояние в функции, тогда как даже если они пусты, они все еще являются объектами. Функция предполагает, что для того, чтобы быть пустым, свойство должно быть не определено, null или пустая строка. –

1

Я полагаю, ты один создания объекта, а, верно? Почему бы просто не добавить свойство объекта, который говорит вам, для чего он предназначен?

Например, если вы создаете объект, вторя JSON из PHP, вы можете добавить свойство "тип":

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

Таким образом, ваша функция визуализации становится:

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

Сохраняет вам нужно пройти через свойства, чтобы узнать что-то, что вы уже должны знать, являетесь ли вы автором объекта. Если вы используете объект, на котором у вас нет контроля, решение Daniel должно это сделать.

Смежные вопросы