如何解决编写递归函数将输入的数据转换为数组
我有这样的数据
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
或 -1
或 null
值,您可以将其作为第二个参数传递给 makeForest
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。