求助,一道前端算法题,应该和递归有关

问题就是 怎么把上面值的变为下面的值

[
    {
        "name":"a1",
        "val":"a1",
        "level":1,
        "son":[
            {
                "name":"a11",
                "val":"a11",
                "level":2,
                "son":[
                    {
                        "name":"a111",
                        "val":"a111",
                        "level":3,
                        "son":[

                        ]
                    }
                ]
            }
        ]
    },
    {
        "name":"b1",
        "val":"b1",
        "level":1,
        "son":[
            {
                "name":"b11",
                "val":"b11",
                "level":2,
                "son":[
                    {
                        "name":"b111",
                        "val":"b111",
                        "level":3,
                        "son":[

                        ]
                    }
                ]
            },
            {
                "name":"b12",
                "val":"b12",
                "level":2,
                "son":[
                    {
                        "name":"b121",
                        "val":"b121",
                        "level":3,
                        "son":[

                        ]
                    }
                ]
            }
        ]
    }
]
[
    {
        "name":"a1",
        "val":"a1",
        "level":1,
        "son":[
            {
                "name":"a11",
                "val":"a11",
                "level":2,
                "son":[
                    {
                        "name":"a111",
                        "val":"a111",
                        "level":3,
                        "son":[

                        ]
                    },
                    {
                        "name":"全部",
                        "val":"",
                        "level":3,
                        "son":[

                        ]
                    }
                ]
            },
            {
                "name":"全部",
                "val":"",
                "level":2,
                "son":[
                    {
                        "name":"全部",
                        "val":"",
                        "level":3,
                        "son":[

                        ]
                    }
                ]
            }
        ]
    },
    {
        "name":"b1",
        "val":"b1",
        "level":1,
        "son":[
            {
                "name":"b11",
                "val":"b11",
                "level":2,
                "son":[
                    {
                        "name":"b111",
                        "val":"b111",
                        "level":3,
                        "son":[

                        ]
                    },
                    {
                        "name":"全部",
                        "val":"",
                        "level":3,
                        "son":[

                        ]
                    }
                ]
            },
            {
                "name":"b12",
                "val":"b12",
                "level":2,
                "son":[
                    {
                        "name":"b121",
                        "val":"b121",
                        "level":3,
                        "son":[

                        ]
                    },
                    {
                        "name":"全部",
                        "val":"",
                        "level":3,
                        "son":[

                        ]
                    }
                ]
            },
            {
                "name":"全部",
                "val":"",
                "level":2,
                "son":[
                    {
                        "name":"全部",
                        "val":"",
                        "level":3,
                        "son":[

                        ]
                    }
                ]
            }
        ]
    },
    {
        "name":"全部",
        "val":"",
        "level":1,
        "son":[
            {
                "name":"全部",
                "val":"",
                "level":2,
                "son":[
                    {
                        "name":"全部",
                        "val":"",
                        "level":3,
                        "son":[

                        ]
                    }
                ]
            }
        ]
    }
]
阅读 2.1k
2 个回答

确实需要递归。只不过通过对比,我发现结果的数据结构有点神奇 —— 居然就是为每个 son 添加一个“全部”节点,而且这个节点还包含所有的子节点的“全部”节点……

大概估计了一下,这个结果是规律的,可以跑出来,示例代码

function addAmountNode(nodes, level = 1) {
    if (!nodes.length) {
        return;
    }
    const son = nodes
        .map(it => addAmountNode(it.son, level + 1))
        .filter(it => it)
        .slice(0, 1);
    const amountNode = {
        name: "全部",
        val: "",
        level,
        son
    };
    nodes.push(amountNode);
    return JSON.parse(JSON.stringify(amountNode));
}

addAmountNode(data);
console.log(JSON.stringify(data, null, 2));
一开始没理解到意图,可能写复杂了,空了再来想下简单的。

想了一下,没想到更简单的……

已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。

伪需求。
你遍历树形结构然后展示为html的时候给每级添加一个全选就行了,该怎么处理就怎么处理。

你的这个思路我就想问一下,现在选中的value是[''],那你告诉我这个用户到底是选了什么。

已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题