繁体   English   中英

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

[英]JavaScript object structure: how to access inner field with 'complex.key'

给定这样的对象:

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

我知道你可以有这样的事情:

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

我的问题来自内部结构“地址”,我想使用obj['address.phone']定位其“电话”内部字段,但它返回的是undefined ,其中所有级别1字段均返回匹配值。

我很确定您可以使用一些(反)序列化函数或任何json库来做到这一点,但是我想知道是否存在一种聪明的方式来列出所有内部结构(如“地址”) ,而无需我初步了解哪个字段目标 (例如obj [field])。

做:

var phone = obj.address.phone;

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

您可以尝试以下方法:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM