首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换父/子结构js中的嵌套对象

转换父/子结构js中的嵌套对象
EN

Stack Overflow用户
提问于 2019-11-22 12:56:33
回答 1查看 395关注 0票数 0

我尝试转换这个结构(每个子对象都是属性):

代码语言:javascript
复制
const tree = {
  "Parent 1" : {
    "Children1": {
      "Children2": {
          "#1": { info: {}},
          "#2": { info: {}}.
          "#3": { info: {}}
    },
    "Children1-1": {
      "Children2-2": {
          "#1": { info: {}},
          "#2": { info: {}}.
          "#3": { info: {}}
    }
  },
  "Parent 2": {
  ...
   }
};

在这个具有父子视图的树结构中。但在我的树的尽头我不需要孩子

代码语言:javascript
复制
const resultTeee = [
  {
    name: 'Parent 1',
    children: [
      {
        name: 'Children 1',
        children: [
          {
            name: 'Children 2',
            children: [
              {name: "#1", info: {}},
              {name: "#2", info: {}}
            ]
          }
        ]
      },
      {
        name: 'Children 1-1',
        children: [
          {
            name: 'Children 2-2',
            children: [
              {name: "#1", info: {}},
              {name: "#2", info: {}}
            ]
          }
        ]
      }
    ]
  },
  {
    name: 'Parent 2'
    ....
  }
]

我尝试了“遍历树”方法,但不知道如何切换新的子路径。对象可以在每个级别上具有多个嵌套结构

EN

回答 1

Stack Overflow用户

发布于 2019-11-22 13:27:51

代码语言:javascript
复制
const toArrayTree = (obj) => {
    return Object.keys(obj).map(key => {
        return {name: key, children: [toArrayTree(obj[key])]}
    })
}

用于测试的对象

代码语言:javascript
复制
const tree = {
    "Parent 1" : {
        "Children1": {
            "Children2": {
                "#1": { info: {}},
                "#2": { info: {}},
                "#3": { info: {}},
            }
        },
    },
    "Parent 2" : {
        "Children2.1": {
            "Children2.2": {
                "#4": { info: {}},
                "#5": { info: {}},
                "#6": { info: {}},
            }
        },
    },
};

但是就像阿迪加说的,为什么最后一棵树不是{ name: 'info', children: [] }

更新解决方案

代码语言:javascript
复制
const toArrayTree = (obj) => {
    return Object.keys(obj).map(key => {
        return typeof obj[key] === 'object' ?
            {name: key, children: [toArrayTree(obj[key])]} :
            {name: key, [key]: obj[key]};
    })
}

使用Object(v) === v确实是个坏主意,因为如果v是函数,例如

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58994759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档