Pun*_*ari 0 javascript arrays recursion multidimensional-array
我有一个包含分层数据的数组,我想将其转换为层次结构,但格式不同。我尝试使用递归方法,但它没有提供正确的数据
下面是我试图实现的代码
static convertConfigJson(data, finalResults = []) {
const configData = JSON.parse(JSON.stringify(data));
return configData.map((item) => {
const { name, type, value, path } = item;
let children = {}
if (type === 'Object') {
children = this.convertConfigJson(value, finalResults);
} else {
finalResults.push({
id: name,
name: name,
children: children
})
}
console.log('>>>>>>>>>', finalResults)
return finalResults;
});
}
Run Code Online (Sandbox Code Playgroud)
下面是我从 API 获取的 JSON 数组
[
{
"name": "info",
"type": "Object",
"value": [
{
"name": "app",
"type": "Object",
"value": [
{
"path": "info.app",
"name": "encoding",
"type": "TEXT",
"value": "@project.build.sourceEncoding@"
},
{
"name": "java",
"type": "Object",
"value": [
{
"path": "info.app.java",
"name": "source",
"type": "TEXT",
"value": "@java.version@"
},
{
"path": "info.app.java",
"name": "target",
"type": "TEXT",
"value": "java.version@"
}
]
}
]
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
我想以下面的格式转换上面的数组,即将值数组更改为子级
[
{
"name": "info",
"type": "Object",
"children": [
{
"name": "app",
"type": "Object",
"children": [
{
"path": "info.app",
"name": "encoding",
"type": "TEXT",
"value": "@project.build.sourceEncoding@"
},
{
"name": "java",
"type": "Object",
"children": [
{
"path": "info.app.java",
"name": "source",
"type": "TEXT",
"value": "@java.version@"
},
{
"path": "info.app.java",
"name": "target",
"type": "TEXT",
"value": "java.version@"
}
]
}
]
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
对 children 属性中的所有元素进行简单的递归遍历。将 .value 设置为 .children 并删除 .value
walk = node => {
if(!node.value || typeof node.value!=='object') return
node.children = node.value
delete node.value
node.children.forEach(walk)
}
data.forEach(walk)
console.log(data)Run Code Online (Sandbox Code Playgroud)
<script>
data=[
{
"name": "info",
"type": "Object",
"value": [
{
"name": "app",
"type": "Object",
"value": [
{
"path": "info.app",
"name": "encoding",
"type": "TEXT",
"value": "@project.build.sourceEncoding@"
},
{
"name": "java",
"type": "Object",
"value": [
{
"path": "info.app.java",
"name": "source",
"type": "TEXT",
"value": "@java.version@"
},
{
"path": "info.app.java",
"name": "target",
"type": "TEXT",
"value": "java.version@"
}
]
}
]
}
]
}
]
</script>Run Code Online (Sandbox Code Playgroud)