使用递归在 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 ]
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP