Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 递归转换json对象_Javascript_Arrays_Json_Recursion - Fatal编程技术网

Javascript 递归转换json对象

Javascript 递归转换json对象,javascript,arrays,json,recursion,Javascript,Arrays,Json,Recursion,我需要帮助将json对象递归转换为另一个json对象 我的输入对象如下所示: var my_obj = { "id": 22, "eventTypeId": 37, "eventTypeName": "CommonOnly", "parentEvent": { "id": 21, "eventTypeId": 35, "eventTypeName": "FullTest", "parentEvent": { "id": 20,

我需要帮助将json对象递归转换为另一个json对象

我的输入对象如下所示:

var my_obj = {
  "id": 22,
  "eventTypeId": 37,
  "eventTypeName": "CommonOnly",
  "parentEvent": {
    "id": 21,
    "eventTypeId": 35,
    "eventTypeName": "FullTest",
    "parentEvent": {
      "id": 20,
      "parentEvent": null,
      "eventTypeId": 38,
      "eventTypeName": "FullTest"
    }
  },
  "childrenEvents": [
    {
      "id": 24,
      "parentEventId": 22,
      "eventTypeId": 36,
      "eventTypeName": "BlindedTest",
      "childrenEvents": []
    },
    {
      "id": 23,
      "parentEventId": 22,
      "eventTypeId": 38,
      "eventTypeName": "OneCustom",
      "childrenEvents": []
    }
  ]
}
我想要的输出是:

var my_obj = {
"id": 20,
"eventTypeId": 38,
"parentEvent": null,
"eventTypeName": "FullTest",
"childrenEvents": [{
    "id": 21,
    "eventTypeId": 35,
    "eventTypeName": "FullTest",
    "childrenEvents": [
        {
            "id": 22,
            "eventTypeId": 37,
            "eventTypeName": "CommonOnly",
            "childrenEvents": [
                {
                    "id": 24,
                    "parentEventId": 22,
                    "eventTypeId": 36,
                    "eventTypeName": "BlindedTest",
                    "childrenEvents": []
                }, {
                    "id": 23,
                    "parentEventId": 22,
                    "eventTypeId": 38,
                    "eventTypeName": "OneCustom",
                    "childrenEvents": []
                }
            ]
        }
    ]
}]
}

因此,我希望能够获得一个对象,其中第二个
parentEvent
parentEvent=null
已成为根元素,具有数组
childrenEvents
,在子数组内部将是第一个父事件对象,它有自己的
childrenEvents
数组,在这个数组内部,我想把现有的根对象放在自己的
childrenEvents
数组中

如果有人能帮我解决这个问题,我将不胜感激。提前谢谢

我的尝试

   function rebuild(input)
{
  var childrenEvents = [] ;

  for ( f in input.parentEvent )    // we may have attributes other than "age"
    if (f.parentEvent == null) {
        f.parentEvent.push(childrenEvents);
    } 
    else {
           f.parentEvent.push(input.parentEvent[f]);
    }

  if (input.childrenEvents.length !== 0)
    {
      input.parentEvent[f].push(input.childrenEvents)
    }

  return input;
}

    console.log(rebuild( $scope.myObj))

});

问题的标题是“递归”,但代码中没有递归(我可以看到)。您需要从
rebuild()
中调用
rebuild()
。。。递归地

可能是更接近这个的东西(还没有运行它)


问题的标题是“递归”,但代码中没有递归(我可以看到)。您需要从
rebuild()
中调用
rebuild()
。。。递归地

可能是更接近这个的东西(还没有运行它)


您可以使用一个对象来构建所有依赖项,并且只获取具有

parentEvent === null
像树一样

var my_obj={“id”:22,“eventTypeId”:37,“eventTypeName”:“commonononly”,“parentEvent”:{“id”:21,“eventTypeId”:35,“eventTypeName”:“FullTest”,“parentEvent”:{“id”:20,“parentEvent”:null,“eventTypeId”:38,“eventTypeName”:“FullTest”},“childrenEvents”:[{“id”:24,“parenteventtypeid”:22,“eventTypeId”:36,“eventTypeName”:“BlindedTest”,“childrenEvents”:[]},{“id”:23,“parentEventId”:22,“eventTypeId”:38,“eventTypeName”:“OneCustom”,“childrenEvents”:[]},
树=函数(数据,根){
功能iter(a){
var父代;
if(a.childrenEvents&&Array.isArray(a.childrenEvents)){
a、 儿童事件。forEach(iter);
}
a、 childrenEvents=o[a.id]&&o[a.id].childrenEvents;
o[a.id]=a;
if(a.parentEvent==根){
r=a;
}否则{
if(a.parentEvent中的a.parentEvent&“id”){
parent=a.parentEvent.id;
}
if(a中的“parentEventId”){
parent=a.parentEventId;
}
如果(父项!==未定义){
o[父]=o[父]|{};
o[parent].childrenEvents=o[parent].childrenEvents | | |[];
o[parent].childrenEvents.push(a);
}
}
如果(a.parentEvent){
国际热核实验堆(iter);
删除a.parentEvent;
}
}
var r,o={};
iter(数据);
返回r;
}(my_obj,空);
console.log(树);

.as console wrapper{max height:100%!important;top:0;}
您可以使用一个对象来构建所有依赖项,并只获取具有

parentEvent === null
像树一样

var my_obj={“id”:22,“eventTypeId”:37,“eventTypeName”:“commonononly”,“parentEvent”:{“id”:21,“eventTypeId”:35,“eventTypeName”:“FullTest”,“parentEvent”:{“id”:20,“parentEvent”:null,“eventTypeId”:38,“eventTypeName”:“FullTest”},“childrenEvents”:[{“id”:24,“parenteventtypeid”:22,“eventTypeId”:36,“eventTypeName”:”BlindedTest,“childrenEvents”:[]},{“id”:23,“parentEventId”:22,“eventTypeId”:38,“eventTypeName”:“OneCustom”,“childrenEvents”:[]},
树=函数(数据,根){
功能iter(a){
var父代;
if(a.childrenEvents&&Array.isArray(a.childrenEvents)){
a、 儿童事件。forEach(iter);
}
a、 childrenEvents=o[a.id]&&o[a.id].childrenEvents;
o[a.id]=a;
if(a.parentEvent==根){
r=a;
}否则{
if(a.parentEvent中的a.parentEvent&“id”){
parent=a.parentEvent.id;
}
if(a中的“parentEventId”){
parent=a.parentEventId;
}
如果(父项!==未定义){
o[父]=o[父]|{};
o[parent].childrenEvents=o[parent].childrenEvents | | |[];
o[parent].childrenEvents.push(a);
}
}
如果(a.parentEvent){
国际热核实验堆(iter);
删除a.parentEvent;
}
}
var r,o={};
iter(数据);
返回r;
}(my_obj,空);
console.log(树);

.as控制台包装{最大高度:100%!重要;顶部:0;}
请显示您尝试过的不起作用的内容……否则,看起来您只是希望有人为您编写代码,因此不是编写代码service@charlietfl让一对min@charlietfl请检查更新应答请显示您尝试过的不起作用的内容…否则看起来您只是希望有人为此编写代码你,所以不是在写代码service@charlietfl让一对min@charlietfl请查看更新答案我离解决方案还很远…希望它能随时间而来。谢谢,我很感激。我离解决方案还很远…希望它能随时间而来。谢谢,我很感激。