Javascript 如何根据json数据的一个公共值对每个级别的json数据进行分组

Javascript 如何根据json数据的一个公共值对每个级别的json数据进行分组,javascript,json,Javascript,Json,我在我的项目中遇到了一些问题,我试图使用JSON数据构建一个树,我有类似的东西 var treeData = [ { "name": "Root Node", "parent": "null", "children": [ { "name": " Transport", "parent": "Root Node",

我在我的项目中遇到了一些问题,我试图使用JSON数据构建一个树,我有类似的东西

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它工作得非常好,就像我需要的那样。