javascript - 如何构建 Javascript 递归树
问题描述
对不起,我的英文不好,希望大家理解。我有一个数组:
var data=[
{
"id": 2,
"parent_id": 1
},
{
"id": 3,
"parent_id": 2
},
{
"id": 7,
"parent_id": 3
},
{
"id": 67,
"parent_id": 1
}
]
这就是我需要查看的结果:
[
{
"id": 2,
"parent_id": 1,
"child":[
{
"id": 3,
"parent_id": 2,
"child":[{
"id": 7,
"parent_id": 3
},
]}
]},
{
"id": 67,
"parent_id": 1
},]
我的想法是:1个方法有2个相同数组的参数。我使用嵌套循环。如果 parent_id == id 将添加字段“child”。
const getTree = function(data, maindata){
const result=data.forEach(item =>{
const child=maindata.forEach(element =>{
if(item.id === element.parent_id){
return true;
}
return false
})
getTree(child, maindata)
item.child = child;
})
return result;
}
console.log(getTree(data,data))
但它没有按应有的方式工作。希望大家帮忙。谢谢
解决方案
我不确定您的原始代码应该做什么,但是您没有得到任何结果,因为 data.forEach 不返回任何内容。您需要首先过滤掉子对象(我认为这是您的原始代码的目标),然后将所有对象分配给它们的父对象,如下所示:
var data=[{"id": 2,"parent_id": 1},{"id": 3,"parent_id": 2},{"id": 7,"parent_id": 3},{"id": 67,"parent_id": 1},]
const filterData = function(data) {
return data.filter(item => {
let isChild = false;
data.forEach(parent => {
if (parent.id == item.parent_id) {
isChild = true;
return;
}
});
return !isChild;
});
}
const getTree = function(data, maindata){
return data.map(item =>{
let children = [];
maindata.forEach(child => {
if (item.id == child.parent_id) {
children.push(child);
}
});
if (children.length > 0) {
item.child = getTree(children, maindata);
}
return item;
});
}
console.log(getTree(filterData(data),data));
推荐阅读
- angular - 在全栈中找不到模型实体名称
- javascript - 当在threejs中发生按键并开始动画时如何旋转3d模型
- python-3.x - 我怎么刮这个?无法在美丽的汤中取出元素,我确实在 HTML 中看到了它们
- node.js - Postgresql 中的 Group by 子句用法
- python - 使用 Flask-Mail 的 Flask 应用程序工厂模式
- visual-studio-2013 - 在 Visual Studio 2013 中出现运行时错误 - 未加载符号错误
- mysql - 从MySql中的数据库中选择所有不包含值的表
- dns - 如何将域定向到确切的应用程序
- python - 基于多列索引将值从一个数据帧复制到另一个数据帧
- azure-devops - Visual Studio 订阅者的 Azure devops 许可