美文网首页
javascript -- 查询树位置

javascript -- 查询树位置

作者: 反者道之动001 | 来源:发表于2019-03-23 18:22 被阅读0次

    寻找树形结构路径; 根据信息查询树形结构位置;根据ID查询INDEX;

    我决定,以后每发一个博文都写一个 故事。

    虽然是枯燥的代码,但是也得有故事,对不对, 毕竟代码是需要调试完成的。

    一开始我以为写个递归就完事了,loop => arr.for i push 这样就完事了,发现i不是我要的。

    然后,找这个规律找好久,就是怎么判断数据是想要的呢。

    首先在arr循环的时候会记录所有的值,所以我们在这里做文章。

    先研究下这个

    手画了一个图

    这里的i就是每一次经过的循序。

    但是这里有垃圾数据,

    为了让结果跟准确,我再画个比较复杂的图。

    在正确的id前面添加数据,避免以为是耦合。

    然后再分析下, 每一次循环的时候,把前面的删掉。

    看图

    但是有的坏死的分支怎么办?

    在每一次循环体的外面删掉前面的就好了

    完成代码如下,带上了例子。

    var arr = [
        {},
        {},
        {
            c: [
                {},
                {},
                {},
                {
                    c: [
                        {},
                        {id: 2},
                    ]
                }
            ]
        },
        {},
        {},
    ]
    function _makePath(tree, children, key, target) {
        var done = false, path = [];
        function traverse(tree, target) {
    
            for (let i = 0; i < tree.length; i++) {
                const node = tree[i];
                if (!done) {
                    if (i > 0) {
                        path.pop()
                    }
                    path.push(i)
                    if (node[key] === target) {
                        done = true
                        return
                    } else {
                        let c = node[children];
                        if (c) {
                            traverse(c, target);
                        }
                    }
                }
            }
            if (!done) {
                path.pop();
            }
            return;
        }
        traverse(tree, target);
    
        return path;
    }
    _makePath(arr, 'c' , 'id', 2)
    

    --完成--

    如果想要根据path修改值,那么可以写for循环,根据path找到值然后修改。

    --END--

    相关文章

      网友评论

          本文标题:javascript -- 查询树位置

          本文链接:https://www.haomeiwen.com/subject/rmwsvqtx.html