给出这样一个对象:
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])。
答案 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);