Javascript 如何根据json数据的一个公共值对每个级别的json数据进行分组
我在我的项目中遇到了一些问题,我试图使用JSON数据构建一个树,我有类似的东西Javascript 如何根据json数据的一个公共值对每个级别的json数据进行分组,javascript,json,Javascript,Json,我在我的项目中遇到了一些问题,我试图使用JSON数据构建一个树,我有类似的东西 var treeData = [ { "name": "Root Node", "parent": "null", "children": [ { "name": " Transport", "parent": "Root Node",
var treeData = [
{
"name": "Root Node",
"parent": "null",
"children": [
{
"name": " Transport",
"parent": "Root Node",
"nodeId":"nod411",
"children": [
{
"name": "Cars",
"parent": "Transport",
"nodeId":"nodjz13l"
},
{
"name": "Transport-2",
"parent": "Transport",
"nodeId":"nod411",
"children": [
{
"name": "Cars",
"parent": "Transport-2",
"nodeId":"nod1_cdot"
},
{
"name": "Cars",
"parent": "Transport-2",
"nodeId":"nod45jkl"
},
{
"name": "Bikes",
"parent": "Transport-2",
"nodeId":"nod411"
},
{
"name": "Cars",
"parent": "Transport-2",
"nodeId":"nod961"
},
{
"name": "Cars",
"parent": "Transport-2",
"nodeId":"nodm2m40"
},
{
"name": "Bikes",
"parent": "Transport-2",
"nodeId":"nod411"
},
]
},
{
"name": "Cars",
"parent": "Transport",
"nodeId":"nod411"
},
{
"name": "Cars",
"parent": "Transport",
"nodeId":"nod311"
},
{
"name": "Bikes",
"parent": "Transport",
"nodeId":"nod411"
},
]
},
{
"name": "Bikes",
"parent": "Root Node",
"nodeId":"nod411"
}
]
}
];
在这里,我想根据类似项的值将其分组为一个键值对,类似这样
var treeData = [
{
"name": "Root Node",
"parent": "null",
"children": [
{
"name": " Transport",
"parent": "Root Node",
"nodeId":"nod411",
"children": [
{"key":"car","values":[
{
"name": "Cars",
"parent": "Transport",
"nodeId":"nodjz13l"
},
{
"name": "Cars",
"parent": "Transport",
"nodeId":"nod411"
},
{
"name": "Cars",
"parent": "Transport",
"nodeId":"nod311"
}
]
},
{
"name": "Transport-2",
"parent": "Transport",
"nodeId":"nod411",
"children": [
{"key":"car","values":[
{
"name": "Cars",
"parent": "Transport-2",
"nodeId":"nod1_cdot"
},
{
"name": "Cars",
"parent": "Transport-2",
"nodeId":"nod45jkl"
},
{
"name": "Cars",
"parent": "Transport-2",
"nodeId":"nod961"
},
{
"name": "Cars",
"parent": "Transport-2",
"nodeId":"nodm2m40"
}
]
},
{"key":"Bikes","values":[
{
"name": "Bikes",
"parent": "Transport-2",
"nodeId":"nod411"
},
{
"name": "Bikes",
"parent": "Transport-2",
"nodeId":"nod411"
}
]
}
]
},
{"key":"Bikes","values":[
{
"name": "Bikes",
"parent": "Transport",
"nodeId":"nod411"
}
]
}
]
},
{
"name": "Bikes",
"parent": "Root Node",
"nodeId":"nod411"
}
]
}
];
我想将数据分组到树的每个级别
我试着用d3做嵌套
var treeDataByName = d3.nest()
.key(function(d) { return d.name; })
.entries(treeData);
console.log(JSON.stringify(treeDataByName));
但是,它只将根节点转换为键值对
任何建议都会有帮助。
感谢您,您可以使用迭代(对于实际数组)和递归(带子数组)方法,按所需的键对每个数组进行分组
函数分组依据(数组、键){
返回数组.reduce((r,o)=>{
var temp=r.find(g=>g.key==o[key]),
value=Object.assign({},o,o.children&&{children:groupBy(o.children,key)});
如果(临时){
温度值推送(值);
}否则{
r、 推送({key:o[key],value:[value]});
}
返回r;
}, []);
}
var树=[{name:“根节点”,父节点:“null”,子节点:[{name:“传输”,父节点:“根节点”,节点ID:“nod411”,子节点:[{name:“Cars”,父节点:“传输”,节点ID:“nodjz13l”},{name:“传输-2”,父节点:“传输-2”,节点ID:“nod1_cdot”},子节点:[{name:“Cars”,家长:“交通-2”,家长:“交通-2”,家长:“交通-2”,家长:“交通-2”,家长:“交通-411”},{姓名:“汽车”,家长:“交通-2”,家长:“交通-961”},{姓名:“汽车”,家长:“交通-2”,家长:“交通-2”,家长:“交通-4m40”},{姓名:“自行车”,家长:“交通-2”,家长:“交通-411”},{姓名:“汽车”,家长:“交通”,家长:“交通,家长:“交通-411”},{name:“Cars”、parent:“Transport”、nodeId:“nod311”}、{name:“Bikes”、parent:“Transport”、nodeId:“nod411”}、{name:“Bikes”、parent:“Root Node”、nodeId:“nod411”}、{,
结果=groupBy(树,“名称”);
console.log(结果);
.as控制台包装{最大高度:100%!重要;顶部:0;}
发布的问题似乎根本不包括解决问题的方法。StackOverflow希望您能这样做,因为您的尝试有助于我们更好地了解您的需求。请编辑问题以显示您的尝试,以便说明您在a中遇到的特定问题。有关更多信息,请参阅并获取。关于第一级和第二级?你也需要按名称分组吗?是的,我需要在每一级进行分组,无论是第一级、第二级还是最后一级。是的,我需要按名称分组。@ninascholz非常感谢你的帮助@Nina它工作得非常好,就像我需要的那样。