微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

编写递归函数将输入的数据转换为数组

如何解决编写递归函数将输入的数据转换为数组

我有这样的数据

let data = [
    {
        id: 1,name: "1"
    },{
        id: 2,name: "2",idParents: 1
    },{
        id: 3,name: "3",idParents: 2
    },{
        id: 4,name: "4",idParents: 1
    }
]

我需要把它转换成这样的数据

let formatedData = [
    {
        id: 1,name: "1",childrens: [
            {
                id: 2,childrens: [
                    {
                        id: 3,name: "3"
                    }
                ]
            },{
                id: 4,name: "4"
            }
        ]
    },]

我是代码新手,任何人都可以向我展示任何编程语言的示例,以便我可以更喜欢。 stackoverflow 中的每个示例都带有输入,所以我很困惑。非常感谢。

解决方法

您是新来的,所以您可能不明白,在提供帮助之前,我们通常希望看到您自己的努力。但我碰巧有这样的东西躺在身边:

const makeForest = (xs,id) => 
  xs .filter (x => x.idParents == id) 
     .map ((x) => {
       const children = makeForest (xs,x.id)
       return {
         ... x,... (children.length ? {children} : {}) 
       }
     })

let data = [{id: 1,name: "1"},{id: 2,name: "2",idParents: 1},{id: 3,name: "3",idParents: 2},{id: 4,name: "4",idParents: 1}]

console .log (makeForest (data))
console .log (makeForest (data) [0])
.as-console-wrapper {max-height: 100% !important; top: 0}

没有明确的保证数据中只有一个根节点,所以这里的函数创建了一个森林,也就是树的集合。如果您确定只有一个根节点,那么您可以只取结果的第一个元素 ([0])。

这是基于没有 idParent 属性的根节点调用的。例如,如果它们具有 0-1null 值,您可以将其作为第二个参数传递给 makeForest

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。