Javascript 递归转换json对象
我需要帮助将json对象递归转换为另一个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,
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请查看更新答案我离解决方案还很远…希望它能随时间而来。谢谢,我很感激。我离解决方案还很远…希望它能随时间而来。谢谢,我很感激。