从另一个嵌套的json对象创建一个嵌套的json对象[HOLD]

时间:2019-03-14 08:50:29

标签: 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 个答案:

答案 0 :(得分: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));