想知道如何在JS中访问无限嵌套的对象?
请考虑以下示例作为我的面试官
您有一个对象,该对象具有父对象和无限嵌套的子对象
[
{
name: "Jack",
age: "98" ,
profession: "doctor
children: [
{
name: "Varun",
age: "80"
profession: "scientist"
children: [
{
name: "Ishan"
age: "62",
profession: "teacher
children: [{....
.....
.....[{
name: "Rahul",
age: "23",
profession: "engineer"
children: [{
.....
我需要找到专业是“工程师”的位置以及给定对象嵌套的深度对应的名称。
注意:此处要考虑的孩子数是无限的。
问题:有人可以帮助我弄清楚如何使用递归和不使用递归
更新:他给了我提示使用分而治之
更新:根据Bary的解决方案,我尝试了类似的方法
let infiniteArray = [
{
name: "Jack",
age: "98" ,
profession: "doctor",
children: [
{
name: "Varun",
age: "80",
profession: "scientist",
children: [
{
name: "Ishan",
age: "62",
profession: "teacher"
}
]
}
]
}
]
function isTheItem(item) {
if (item["profession"] === "teacher") return item
return false
}
function walk(collection) {
return collection.find(item => isTheItem(item) || walk(item.children));
}
但是当我进行console.log记录时,即console.log(walk(infiniteArray))
,它记录了整个infiniteArray,我知道为什么,但是我去了它,只是返回了与行业相对应的名称。对我如何实现有帮助吗?
name: "Ishan",
age: "62",
profession: "teacher"
}
答案 0 :(得分:3)
在收藏中有两个方向 *同胞 *嵌套
因此您可以使用常规数组迭代器迭代此兄弟项,然后递归遍历每个项的子项。
function isTheItem(item) {
return ...;
}
function walk(collection) {
return collection.find(item => isTheItem(item) || walk(item.children));
}
答案 1 :(得分:0)
除征和征服算法通常与对数组中的值进行排序(在采访过程中)有更多关系。如果您按年龄或其他排序,我可以看到这只是一个提示。但是,当搜索无限数量的嵌套对象的键值对时,无法真正进行分而治之。您必须搜索n个值,直到找到结果。使用要查找的存储的随机键值对,对象的任何划分都不一定会提高效率。
如果我错了,更多经验丰富的开发人员会纠正我
Barry Gane为您为实际应用编写的代码提供了良好的开端。