2015-05-06 3 views
0

У меня есть набор вложенности объекта JSON как это:доступа произвольное свойство из объекта

var obj = { 
    name: "student", 
    contact: { 
    phone: "22222", 
    fax: "33333", 
    ... 
    }, 
    ... 
} 

И у меня есть эти текстовые поля:

<input type="text" name="name" /> 
<input type="text" name="contact_phone" /> 
<input type="text" name="contact_fax" /> 
... 

Теперь я хочу, чтобы заполнить эти поля с помощью соответствующего свойства сверху объект. Мой вопрос: Как я могу получить доступ к анонимному свойству этого объекта? Например предположим, у меня есть этот код JQuery:

$("#formID").find("input").each(function(index) { 
    fieldName = $(this).attr("name"); 
    var namePart = fieldName.split("_"); 
    //I want something like this: console.log(obj.namePart[0].namePart[1]) 
}); 
+0

Там нет такого понятия, как анонимные собственности. Все значения свойств имеют имя свойства. – jfriend00

+0

Я думаю, вы имеете в виду 'произвольный' не' анонимный' – Paarth

+0

. Какое лучшее название для этого вопроса? Я не знаю, не могли бы вы выбрать другой подходящий заголовок? – hamed

ответ

3

Использование obj["propertyName"]

obj[namePart[0]][namePart[1]] 

$('#formID').find("input").each(function(index) { 
    fieldName = $(this).attr("name"); 
    var namePart; 
    if(fieldName.indexOf('_') > -1){ 
     namePart = fieldName.split("_"); 
     console.log(obj[namePart[0]][namePart[1]]) 
    } 
    else{ 
     namePart = fieldName; 
     console.log(obj[namePart]) 
    } 

}); 

* Примечание: Свойство не является анонимным. Если ваш запуск obj["propertyName"] на объекте без такого свойства, он будет возвращен undefined.

+0

Спасибо за ваш ответ. Это сработало отлично. – hamed

0

Редактировать: Извините, что я неправильно понял вопрос. То, что вы ищете, это нечто подобное.

var obj = { 
    name: "student", 
    contact: { 
     phone: "22222", 
     fax: "33333" 
    } 
}; 

$('#formID').("input").each(function(index) { 
    fieldName = $(this).attr("name"); 
    var namePart = fieldName.split("_"); 

    var arbitraryVal = obj; 
    for (var part in namePart) { 
     if (arbitraryVal.hasOwnProperty(namePart[part])) { 
      arbitraryVal = arbitraryVal[namePart[part]]; 
      continue; 
     } 
     arbitraryVal = null; 
     break; 
    } 

    if (typeof $(this).val(arbitraryVal) !== 'undefined') { 
     $(this).val(arbitraryVal); 
    } 
}); 

recusivly ищет объект для каждой части имени. Если часть имени contact_phone Он будет искать obj.contact.phone если something_else_with_lots_of_underscores он будет искать obj.something.else.with.lots.of.underscores

JS FIDDLE

+0

Благодарим вас за ответ. Но мне нужно получить доступ к любому ** произвольному ** свойству из этого объекта. Не просто «контакт». – hamed

0
<form ID="formID"> 
     <input type="text" name="name" /> 
     <input type="text" name="contact_phone" /> 
     <input type="text" name="contact_fax" /> 
    </form> 

    $("#formID").find("input").each(function() { 
     fieldName = $(this).attr("name"); 
     namePart = fieldName.split("_"); 
     if(namePart.length ==1 && namePart[0]=="name"){ 
      $(this).val(obj.name); 
     } 
     else if(namePart.length>1){ 
      $(this).val(obj[namePart[0]][namePart[1]]); 
     } 
     //I want something like this: console.log(obj.namePart[0].namePart[1]) 
    });  

http://jsfiddle.net/57vL6b0w/

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