问题描述
我有这样的数据
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
。