首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换JavaScript对象- JavaScript

转换JavaScript对象- JavaScript
EN

Stack Overflow用户
提问于 2020-08-27 05:24:20
回答 1查看 235关注 0票数 0

我有一个简单的JavaScript嵌套对象,如下所示。我不知道会有多少孩子,但这就是我所收到的数据的本质。我怎样才能转化成预期的结果?

原始数据嵌套json

代码语言:javascript
复制
{
    "work": {
        "children": {
            "abc": {
                
                "label": "Work address",
                "name": "address"
            },
            "xyz": {
                
                "label": "Work phone",
                "name": "phone"
            },
            "efg": {
                "children": {
                    "position": {
                        
                        "label": "Work",
                        "name": "position"
                    },
                    "employees": {

                        "label": "Number of employees",
                        "name": "employees"
                    }
                }
            }
        }
    }
}

期望

代码语言:javascript
复制
{
      work: {
        "address": "",
        "phone": "",
        "details": {
          "position": "",
          "employees": ""
        }
      }
    }

我尝试的是下面的代码

代码语言:javascript
复制
var jsonschema = root.json
var newjson = {}
for (let name in jsonschema) {
     if (jsonschema.children.length > 0 ) {
          //add a empty object to newjson
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-27 05:40:16

您可以使用通用的map函数和递归的transform函数-

代码语言:javascript
复制
const map = (f, t) =>
  Object.fromEntries(Object.entries(t).map(([ k, v ]) => [ k, f(v) ]))

const transform = (t = {}) =>
  t.name 
    ? ""
    : map(transform, t.children || t)

const input =
  {"work":{"children":{"address":{"component":"BaseInput","label":"Work address","name":"address"},"phone":{"component":"BaseInput","label":"Work phone","name":"phone"},"details":{"children":{"position":{"component":"BaseInput","label":"Work position","name":"position"},"employees":{"component":"BaseInput","label":"Number of employees","name":"employees"}}}}}}
  
console.log(transform(input))

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

https://stackoverflow.com/questions/63609688

复制
相关文章

相似问题

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