首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JavaScript嵌套属性

JavaScript嵌套属性
EN

Stack Overflow用户
提问于 2018-06-08 03:59:00
回答 2查看 1.8K关注 0票数 1

如果我有一个具有嵌套属性的对象。是否有一个函数可以搜索所有属性,以及值为其他对象的属性(这些对象也有自己的属性)等等?

示例对象:

代码语言:javascript
复制
const user = { 
    id: 101, 
    email: 'help@stack.com', 
    info: { 
        name: 'Please', 
        address: {
            state: 'WX' 
        }
    }
}

在上面的对象中,有没有一种方法可以简单地调用类似于

代码语言:javascript
复制
console.log(findProp(user, 'state'));
console.log(findProp(user, 'id'));
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-08 04:17:47

您需要的是一个递归函数,它查找匹配键的嵌套项(以及Object和Array )(我还添加了一个用于查找的数组):

代码语言:javascript
复制
var user = { id: 101, email: 'help@stack.com', info: {name: 'Please', address: {state: 'WX' }, contacts: [{'phone': '00000000'}, {'email': 'aaa@bbb.ccc'}]}}

function keyFinder(object, key) {
  if(object.hasOwnProperty(key)) return object[key];
  for(let subkey in object) {
    if(!object.hasOwnProperty(subkey) || typeof object[subkey] !== "object") continue;
    let match = keyFinder(object[subkey], key);
    if(match) return match;
  }
  return null;
}

console.log('id', keyFinder(user, 'id'));
console.log('state', keyFinder(user, 'state'));
console.log('phone', keyFinder(user, 'phone'));
console.log('notexisting', keyFinder(user, 'notexisting'));

Object.hasOwnProperty防止对内置属性进行迭代或检索。

票数 1
EN

Stack Overflow用户

发布于 2018-06-08 04:07:06

代码语言:javascript
复制
 function findProp(obj, search) {
   if(key in obj) return obj[key];
   for(const key in obj) {
     if(typeof obj[key] === "object" && obj[key] !== null) {
       const res = findProp(obj[key], search);
       if(res) return res;
     }
   }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50749322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档