为了账号安全,请及时绑定邮箱和手机立即绑定

基于 .(dot) 的嵌套对象

基于 .(dot) 的嵌套对象

三国纷争 2022-01-07 21:12:14
我有这样的对象    var RecuiterInfo = {}    RecruiterInfo.Quote: "1"    RecruiterInfo.CompanyName: "Imperial Innovations",    RecruiterInfo.OrganizationSize: "2",    RecruiterInfo.Person.CitizanZenship: null,    RecruiterInfo.Person.DOB: "Farkhonda@hotmail.com",    RecruiterInfo.Person.Email: "Farkhonda",    RecruiterInfo.Person.FirstName: "FaiZi",    RecruiterInfo.Person.Gender: "4456565656"    RecruiterInfo.Person.LastName: "4456565656",    RecruiterInfo.Person.PhoneNo: "4456565656",    RecruiterInfo.Person.UserId.UserName: "MTIzNDU2",    RecruiterInfo.Person.UserId.Password: null我想将此对象转换为这种特定格式        {      "QueryObjectID":"RecruiterInfo",      "Values": [        {          "AppFieldID": "Person",          "Value": [            {              "AppFieldID": "CitizanZenship",              "Value": "1"            },            {              "AppFieldID": "DOB",              "Value": "01/01/2019"            },            {              "AppFieldID": "Email",              "Value": "test1@test.com"            },            {              "AppFieldID": "FirstName",              "Value": "test"            },            {              "AppFieldID": "Gender",              "Value": "1"            },            {              "AppFieldID": "LastName",              "Value": "test last"            },            {              "AppFieldID": "PhoneNo",              "Value": "7897897895"            },            {              "AppFieldID": "UserId",              "Value": [                {                  "AppFieldID": "UserName",                  "Value": "test1@test.com"                },                {                  "AppFieldID": "Password",                  "Value": "123456"                }              ]            }          ]        },但它应该是通用/动态的(我不想要任何静态的东西,因为在功能中会有多个点/或嵌套对象)我认为循环将基于.(点),它会嵌套不确定谁能帮我这个json转换
查看完整描述

2 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

您可以递归地执行此操作。


const convert = (obj) => {

  if (obj === null) return null

  if (typeof obj !== 'object') return obj

  return Object.entries(obj)

    .reduce((acc, [key, value]) => acc.concat({

      AppFieldId: key,

      Value: convert(value), // Recursive call

    }), [])

}


console.log(JSON.stringify(convert(RecruiterInfo), null, 2))

这并不完全像你想要的那样,但你首先需要静态的东西。


[

  {

    "AppFieldId": "Quote",

    "Value": "1"

  },

  {

    "AppFieldId": "CompanyName",

    "Value": "Imperial Innovations"

  },

  {

    "AppFieldId": "OrganizationSize",

    "Value": "2"

  },

  {

    "AppFieldId": "Person",

    "Value": [

      {

        "AppFieldId": "CitizanZenship",

        "Value": null

      },

      {

        "AppFieldId": "DOB",

        "Value": "Farkhonda@hotmail.com"

      },

      {

        "AppFieldId": "Email",

        "Value": "Farkhonda"

      },

      {

        "AppFieldId": "FirstName",

        "Value": "FaiZi"

      },

      {

        "AppFieldId": "Gender",

        "Value": "4456565656"

      },

      {

        "AppFieldId": "LastName",

        "Value": "4456565656"

      },

      {

        "AppFieldId": "PhoneNo",

        "Value": "4456565656"

      },

      {

        "AppFieldId": "UserId",

        "Value": [

          {

            "AppFieldId": "UserName",

            "Value": "MTIzNDU2"

          },

          {

            "AppFieldId": "Password",

            "Value": null

          }

        ]

      }

    ]

  }

]


查看完整回答
反对 回复 2022-01-07
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

您可以采用迭代方法。


var data = { 'RecruiterInfo.Quote': "1", 'RecruiterInfo.CompanyName': "Imperial Innovations", 'RecruiterInfo.OrganizationSize': "2", 'RecruiterInfo.Person.CitizanZenship': null, 'RecruiterInfo.Person.DOB': "Farkhonda@hotmail.com", 'RecruiterInfo.Person.Email': "Farkhonda", 'RecruiterInfo.Person.FirstName': "FaiZi", 'RecruiterInfo.Person.Gender': "4456565656", 'RecruiterInfo.Person.LastName': "4456565656", 'RecruiterInfo.Person.PhoneNo': "4456565656", 'RecruiterInfo.Person.UserId.UserName': "MTIzNDU2", 'RecruiterInfo.Person.UserId.Password': null },

    result = Object.entries(data).reduce((r, [s, v]) => {

        var path = s.split('.'),

            last = path.pop();


        path

            .reduce((o, k, i) => {

                var temp = o.find(q => q[i ? 'AppFieldID' : 'QueryObjectID'] === k);

                if (!temp) o.push(temp = i ? { AppFieldID: k, Value: [] } : { QueryObjectID: k, Values: [] });

                return temp[i ? 'Value' : 'Values'];

            }, r)

            .push({ AppFieldID: last, Value: v });


        return r;

    }, []);


console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }


查看完整回答
反对 回复 2022-01-07
  • 2 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号