JavaScript:将递归结果添加到数组并返回它

标签 javascript algorithm recursion

我有一个嵌套对象,我的目标是获取路径,直到数组中的键值对匹配为止。

我当前的实现通过字符串并将字符串与点(“.”)连接来实现。

但是,我不想将所有临时结果添加到数组中并推送到它。但不知怎的,这不起作用。

带有示例数据的代码


const data = [
    {
        parentId: "1111",
        name: "Audi",
        children : [
            {
                parentId: "2222",
                name: "Benz",
                children : [
                    {
                        parentId: "3333",
                        name: "VW",
                        children : [
                        ]
                    }
                ]
            }
        ]
    }
]




const pathTo = (array, target) => {
    var result;
    array.some(({ parentId, name, children = [] }) => {
        if (parentId === target) {
            return result = JSON.stringify({"parentId" : parentId, "name" : name});
        }
        var temp = pathTo(children, target)
        if (temp) {
            return result = JSON.stringify({"parentId" : parentId, "name" : name}) + "." + temp;
        }
    });
    return result;
};


console.log(pathTo(data, "3333"))

当前结果


{"parentId":"1111","name":"Audi"}.{"parentId":"2222","name":"Benz"}.{"parentId":"3333","name":"VW"}

=> 用字符串连接的路径。但我想:

预期结果


[ "{"parentId":"1111","name":"Audi"}", "{"parentId":"2222","name":"Benz"}"{"parentId":"3333","name":"VW"}"]

=> 所有元素按后续顺序排列的数组。

最佳答案

您可以返回一个数组或未定义

const
    data = [{ parentId: "1111", name: "Audi", children : [{ parentId: "2222", name: "Benz", children : [{ parentId: "3333", name: "VW", children : [] }] }] }],
    pathTo = (array, target) => {
        let result;
        array.some(({ parentId, name, children = [] }) => {
            if (parentId === target) {
                result = [{ parentId: parentId, name: name }];
                return true;
            }
            const temp = pathTo(children, target)
            if (temp) {
                result = [{ parentId: parentId, name: name }, ...temp];
                return true;
            }
        });
        return result;
    };

console.log(pathTo(data, "3333"))
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于JavaScript:将递归结果添加到数组并返回它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69658579/

相关文章:

algorithm - 核外连通分量算法

基于信号延迟找出传感器相对位置的算法

javascript - 下面的代码是否递归地使用内存

arrays - 矩阵遍历没有做最优路径

javascript - 使用 jquery 选择级联下拉验证

javascript - 检查数组的所有值是否相等

r - 如何预先确定互斥比较?

c - 在这种情况下,无限递归调用应该引发堆栈溢出吗?

javascript - 使用 Javascript 可排序/可搜索列表

javascript - 防止 Bootstrap Accordion 扩展到父 div 之外