递归列出嵌套对象键 JavaScript


假设我们有一个对象,其属性值为其他对象,它嵌套了 2-3 层甚至更多。

这是一个示例对象:

const people = {
   Ram: {
      fullName: 'Ram Kumar',
      details: {
         age: 31,
         isEmployed: true
      }
   },
   Sourav: {
      fullName: 'Sourav Singh',
      details: {
         age: 22,
         isEmployed: false
      }
   },
   Jay: {
      fullName: 'Jay Grewal',
      details: {
         age: 26,
         isEmployed: true
      }
   }
}

我们的任务是编写一个函数,该函数接受此对象和一个字符串,在整个对象中搜索该字符串作为键,并返回一个数组,其中包含与该字符串匹配的所有键的值。

让我们将该函数称为 recursiveSearch(),鉴于嵌套,递归将是解决这种情况的最合适方法。

因此,此函数 recursiveSearch() 的完整代码将为:

示例

const people = {
   Ram: {
      fullName: 'Ram Kumar',
      details: {
         age: 31,
         isEmployed: true
      }
   },
   Sourav: {
      fullName: 'Sourav Singh',
      details: {
         age: 22,
         isEmployed: false
      }
   },
   Jay: {
      fullName: 'Jay Grewal',
      details: {
         age: 26,
         isEmployed: true
      }
   }
}
const recursiveSearch = (obj, searchKey, results = []) => {
   const r = results;
   Object.keys(obj).forEach(key => {
      const value = obj[key];
      if(key === searchKey && typeof value !== 'object'){
         r.push(value);
      }else if(typeof value === 'object'){
         recursiveSearch(value, searchKey, r);
      }
   });
   return r;
};
console.log(recursiveSearch(people, 'age'));

输出

控制台中的输出将为:

[ 31, 22, 26 ]

在上述函数中,首先我们迭代主对象,并在遇到嵌套时递归迭代子对象搜索所需的键,如果找到所需的键,我们立即将其值记录在 results 数组中,最后当我们完成迭代时,我们返回包含所需值的 results 数组。

此函数的时间复杂度为 O(mn),其中 n 是主对象内子对象的个数,m 是嵌套的最深层级。

更新于: 2020年8月19日

6K+ 浏览量

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告