使用递归在 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'));
在此函数中,首先我们遍历主对象,每当遇到嵌套时,我们就会递归遍历子对象以搜索所需的键,如果我们找到所需的键,我们立即将它的值记录在 results 数组中,最后当我们完成遍历时,我们返回包含所需值的 results 数组。
此函数的时间复杂度为 O(mn),其中 n 是主对象内部子对象的个数,m 是嵌套的最深层级。
此代码在控制台中的输出将为:
[ 31, 22, 26 ]
广告