首页 > 解决方案 > 如何在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"},
            ]
        },

    ]


};

我试图objecttree 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
    }

标签: javascriptrecursiontree

解决方案


您需要迭代对象的子对象并为结果取一个变量。

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; }


推荐阅读