使用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
      }
   }
}

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

让我们称之为function 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'));

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

该函数的时间复杂度为O(mn),其中为主要对象内子对象的数量,m为嵌套的最深层。

控制台中此代码的输出为-

[ 31, 22, 26 ]