javascript - 如何在javascript中使用递归查找对象?
问题描述
let tree = {
name: "A",
children: [
{
name: 'A-1',
children: [
{name: "A-1-A"},
{name: "A-1-B"},
]
},
{
name: 'B-1',
children: [
{
name: "B-1-A",
children: [
{name: "B-11-A"},
{name: "B-11-B"}
]
},
{name: "B-1-B"},
]
},
]
};
我试图object
从tree object
使用 recursion 中找到。
当我这样调用searchFn(tree,'A-1')
它应该返回{
name: 'A-1',
children: [
{name: "A-1-A"},
{name: "A-1-B"},
]
}
对象
我这样称呼searchFn(tree,'A-1-A')
它应该返回这个
{name: "A-1-A"}
我试过这样但不工作
function searchFn(obj ,searchText){
if(obj.name === searchText) return obj
if(obj.children.length > 0){
return searchFn(obj.children.pop(),searchText)
}
return null
}
解决方案
您需要迭代对象的子对象并为结果取一个变量。
function searchFn(object, searchText) {
var result;
if (object.name === searchText) return object;
(object.children || []).some(o => result = searchFn(o, searchText));
return result || null;
}
let tree = { name: "A", children: [{ name: 'A-1', children: [{ name: "A-1-A" }, { name: "A-1-B" }] }, { name: 'B-1', children: [{ name: "B-1-A", children: [{ name: "B-11-A" }, { name: "B-11-B" }] }, { name: "B-1-B" }] }] };
console.log(searchFn(tree, 'foo'));
console.log(searchFn(tree, 'A-1'));
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- angularjs - 为什么多选中的占位符在页面加载时仅显示单个字符?
- swift - 'ContentView' 类型的值没有成员标志 Tapped' 并且包含声明的闭包不能与结果生成器 'ViewBuilder' 一起使用
- ionic-framework - Ionic admob 没有数据显示在统计中
- c# - Select2:为下拉列表设置默认值,从 C# 模型中获取的数据以剃刀语法
- javascript - 更改输入元素之外的类
- python - 在 CUDA 上运行时,pytorch 生产进程以退出代码 139 结束?
- android - 如何从按钮单击kotlin调用函数
- python - 在 transcribe voicefile2text 中引入 puntuaction
- swiper - 缩略图滑动器如何控制画廊滑动器?
- spring - 在 Spring Webflux 中是否有静态方法来获取当前的 ServerHttpRequest?