JavaScript对象结构:如何使用' complex.key'访问内部字段。

时间:2014-07-30 16:08:45

标签: javascript

给出这样一个对象:

var obj = {
"name":"JonDoe",
"gender":"1",
"address":{
    "phone":"1"
    }
}

我知道你可以拥有这样的东西:

    console.log(obj['name']); // returns 'JonDoe'

我的问题来自内部结构'地址'其电话'内部字段我想以obj['address.phone']为目标,但它返回 undefined ,其中所有第1级字段都返回匹配值。

我很确定你可以用一些(de)序列化函数或任何json lib来做,但我想知道是否有一种聪明的方法可以列出所有内部结构,例如' address' 没有初步了解我将要定位的字段(如obj [field])。

2 个答案:

答案 0 :(得分:3)

执行:

var phone = obj.address.phone;

使用变量作为属性名称时,通常会使用括号表示法。如果您知道这些属性,请随意使用点符号(见上文)

答案 1 :(得分:2)

你可以试试这个:

var addresses = [];

for (var key in obj) {
    if (obj.hasOwnProperty(key)) {
        addresses.push(obj[key]['address']);
    }
}

console.log(addresses);

对于更复杂的对象属性查询,请使用此库linq.js - LINQ for JavaScript

更新

如果你想列出所有地址电话,无论它们有多深,都要尝试递归扫描:

var phones = [];

var scan = function(obj) {
    for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
            if (key == 'address') {
                phones.push(obj[key]['phone']);
            }
            else if (typeof obj[key] === 'object') {
                scan(obj[key]);
            }
        }
    }
};

scan(obj)
console.log(phones);