javascript -- 查询树位置

2019-03-23  本文已影响0人  反者道之动001

寻找树形结构路径; 根据信息查询树形结构位置;根据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--

上一篇下一篇

猜你喜欢

热点阅读