簡體   English   中英

從對象訪問任意屬性

[英]access arbitrary property from object

我有一組這樣的嵌套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])
});

使用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"] ,它將返回未定義。

編輯:對不起,我誤解了這個問題。 您正在尋找的是這樣的東西。

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);
    }
});

為每個名稱部分檢索對象。 如果名稱部分contact_phone它會尋找obj.contact.phone如果是something_else_with_lots_of_underscores它會尋找obj.something.else.with.lots.of.underscores

JS菲德爾

    <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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM