#javascript #json
#javascript #json
Вопрос:
Как указано в вопросе, я хочу создать новый объект из текущего объекта json.
Мой текущий объект json:
{
"name": "Parent",
"children": [
{
"name": "Child1",
"children": [
{
"name": "GrandChid1",
"children": []
},
{
"name": "GrandChild2",
"children": []
},
{
"name": "GrandChild3",
"children": [
{
"name": "GrandGrandChild1",
"children": [
{
"name": "GrandGrandGrandChild1",
"children": []
},
{
"name": "GrandGrandGrandChild2",
"children": []
}
]
}
]
}
]
}
]
}
Теперь новый объект будет выглядеть примерно так:
{
"Parent": [
{
"Child1": [
{
"GrandChid1": ''
},
{
"GrandChild2": ''
},
{
"GrandChild3": [
{
"GrandGrandChild1": [
{
"GrandGrandGrandChild1": ''
},
{
"GrandGrandGrandChild2": ''
}
]
}
]
}
]
}
]
}
Если дочерних элементов нет, то это становится парой строка (простое значение ключа).
Приветствуется любая помощь, особенно с рекурсивным решением.
Комментарии:
1. К вашему сведению, SO не для того, чтобы я хотел . Это из-за того, что я застрял здесь .
2. @HassanAbbas должен ли первый дочерний элемент ‘Parent’ быть
Child1
: […] вместо {‘name’:’Child1′, children:[…]} в вашем желаемом выходном json?3. Спасибо, что указали на это, с моей стороны это ошибка. Я отредактирую 🙂
Ответ №1:
Попробуйте
let r = o=> (o.children=o.children.map(x=>r(x)),
{[o.name]: o.children.length ? o.children:''});
let c= {
"name": "Parent",
"children": [
{
"name": "Child1",
"children": [
{
"name": "GrandChid1",
"children": []
},
{
"name": "GrandChild2",
"children": []
},
{
"name": "GrandChild3",
"children": [
{
"name": "GrandGrandChild1",
"children": [
{
"name": "GrandGrandGrandChild1",
"children": []
},
{
"name": "GrandGrandGrandChild2",
"children": []
}
]
}
]
}
]
}
]
}
let r = o=> (o.children=o.children.map(x=>r(x)),{[o.name]: o.children.length ? o.children:''});
console.log(r(c));