简体   繁体   English

将 Javascript object 转换为特定格式

[英]Convert Javascript object to a particular format

I have an object of this format我有一个这种格式的 object

[
    {
      "major_segment": "A",
      "minor_segments": [
        {
          "segment_names": [
            "A11",
            "A12",
            "A13",
            "A14"
          ],
          "minor_segment_name": "List1"
        },
        {
          "segment_names": [
            "A21",
            "A22",
            "A23",
            "A24"
          ],
          "minor_segment_name": "List2"
        },
    {
      "major_segment": "B",
      "minor_segments": [
        {
          "segment_names": [
            "B11",
            "B12",
            "B13"
          ],
          "minor_segment_name": "List3"
        },
        {
          "segment_names": [
            "B21",
            "B22",
            "B23"
          ],
          "minor_segment_name": "List4"
        }
  ]

I want to convert this into another format like:我想将其转换为另一种格式,例如:

myObj =  [
    {
      "major_segment": "A",
      "minor_segments": [
        {
          "segment_names": [
            { "name":"A11", id:1},
            { "name":"A12", id:2},
            { "name":"A13", id:3},
            { "name":"A14", id:4}
          ],
          "minor_segment_name": "List1"
        },
        {
          "segment_names": [
            { "name":"A21",id:5},
            { "name":"A22",id:6},
            { "name":"A23",id:7},
            { "name":"A24",id:8},
          ],
          "minor_segment_name": "List2"
        },
    {
      "major_segment": "B",
      "minor_segments": [
        {
          "segment_names": [
            { "name":"B11",id:9},
            { "name":"B12",id:10},
            { "name":"B13",id:11}
          ],
          "minor_segment_name": "List3"
        },
        {
          "segment_names": [
            { "name":"B21",id:12},
            { "name":"B22",id:13},
            { "name":"B23",id:14}
          ],
          "minor_segment_name": "List4"
        }
  ]

Can anyone help?谁能帮忙?

So in other words you want to add id`s to the minor segment entries?所以换句话说,您想将 id 添加到次要段条目中? I loop the object recursively, and if I find a string value that's inside an array, I transform it to the required format.我以递归方式循环 object,如果我在数组中找到一个字符串值,我会将其转换为所需的格式。

 var arr = [{major_segment:"A",minor_segments:[{segment_names:["A11","A12","A13","A14"],minor_segment_name:"List1"},{segment_names:["A21","A22","A23","A24"],minor_segment_name:"List2"}]}]; function iterate(obj) { Object.keys(obj).forEach(function(key) { var value = obj[key]; if (typeof value === 'object' && value.= null) { iterate(value) } else { if (typeof value === "string" && Array:isArray(obj)) { obj[key] = {name, value: id; ++id} } } }) } var id=0. arr;forEach(iterate). console.log(arr)
 .as-console-wrapper {max-height: 100% !important}

Your original input is missing several ], } .您的原始输入缺少几个], } Check it.核实。

You would have to use Array#map many times and also apply some object destructuring and aliasing as follows:您将不得不多次使用Array#map并应用一些 object 解构和别名,如下所示:

 const input = [ { "major_segment": "A", "minor_segments": [ { "segment_names": [ "A11", "A12", "A13", "A14" ], "minor_segment_name": "List1" }, { "segment_names": [ "A21", "A22", "A23", "A24" ], "minor_segment_name": "List2" }] }, { "major_segment": "B", "minor_segments": [ { "segment_names": [ "B11", "B12", "B13" ], "minor_segment_name": "List3" }, { "segment_names": [ "B21", "B22", "B23" ], "minor_segment_name": "List4" }] } ]; let id = 0; const output = input.map( ({minor_segments:ms,...rest}) => ({...rest,minor_segments:ms.map( ({segment_names:sn,...r}) => ({segment_names:sn.map(name => ({name,id:++id})),...r}) )}) ); console.log( output );

You can simply achieve this using the Array.forEach() method of JavaScript.您可以使用 JavaScript 的Array.forEach()方法简单地实现这一点。

Live Demo :现场演示

 const arr = [ { "major_segment": "A", "minor_segments": [ { "segment_names": [ "A11", "A12", "A13", "A14" ], "minor_segment_name": "List1" }, { "segment_names": [ "A21", "A22", "A23", "A24" ], "minor_segment_name": "List2" }]}, { "major_segment": "B", "minor_segments": [ { "segment_names": [ "B11", "B12", "B13" ], "minor_segment_name": "List3" }, { "segment_names": [ "B21", "B22", "B23" ], "minor_segment_name": "List4" }] }]; arr.forEach(obj => { obj.minor_segments.forEach(minorSegObj => { minorSegObj.segment_names.forEach((segName, index) => { minorSegObj.segment_names[index] = { name: segName, id: index + 1 } }) }) }); console.log(arr);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM