首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从数组的对象创建嵌套对象

从数组的对象创建嵌套对象
EN

Stack Overflow用户
提问于 2022-06-15 18:04:13
回答 2查看 82关注 0票数 1

我如何获得这样的对象数组:

代码语言:javascript
复制
let data = [
    {
        "FirstName": "TRACY",
        "Code": "CCI41",
        "UtilName": "Cable",
        "gridid": 570
    },
    {
        "FirstName": "ANGELA",
        "Code": "TWCZ40",
        "UtilName": "Cable",
        "gridid": 570
    },
    {
        "FirstName": "WILFORD",
        "Code": "TCE12",
        "UtilName": "Electric",
        "gridid": 570
    },
    {
        "FirstName": "COREY",
        "Code": "SCEJZ40",
        "UtilName": "Electric",
        "gridid": 570
    },
    {
        "FirstName": "ERNEST",
        "Code": "SGRAZ01",
        "UtilName": "Fiber",
        "gridid": 570
    },
    {
        "FirstName": "WILFORD",
        "Code": "TCE12",
        "UtilName": "Fiber",
        "gridid": 570
    },
    {
        "FirstName": "COREY",
        "Code": "SCGZ02",
        "UtilName": "Gas",
        "gridid": 570
    },
    {
        "FirstName": "ANGELO",
        "Code": "BSZT29",
        "UtilName": "Phone",
        "gridid": 570
    }
]

并将其转换为这样的数组,其中包含按每个gridid分组的每个UtilName

代码语言:javascript
复制
let newArr = [
  {
    570: [
      {
        "Cable": [
          {
            "FirstName": "Tracey",
            "Code": "CCI41"
          }, {
            "FirstName": "ANGELA",
            "Code": "TWCZ40"
          }
        ],
        "Electric": [
          {
            "FirstName": "WILFORD",
            "Code": "TCE12"
          }, {
            "FirstName": "COREY",
            "Code": "SCEJZ40"
          }
        ],
        "Fiber": [
          {
            "FirstName": "WILFORD",
            "Code": "TCE12"
          }
        ],
        "Gas": [
          {
            "FirstName": "COREY",
            "Code": "SCGZ02"
          }
        ],
        "Phone": [
          {
            "FirstName": "ANGELO",
            "Code": "BSZT29"
          }
        ]
      }
    ]
  }
]

它可以以其他方式构建,但目标是将每个人分组到一个grididUtilName中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-15 18:39:59

代码语言:javascript
复制
let data = [
    {"FirstName": "TRACY","Code": "CCI41","UtilName": "Cable","gridid": 570},
    {"FirstName": "ANGELA","Code": "TWCZ40","UtilName": "Cable","gridid": 570},
    {"FirstName": "WILFORD","Code": "TCE12","UtilName": "Electric","gridid": 570},
    {"FirstName": "COREY","Code": "SCEJZ40aa","UtilName": "Electric","gridid": 570},
    {"FirstName": "COREY","Code": "SCEJZ40","UtilName": "Electric","gridid": 580},
    {"FirstName": "COREY","Code": "SCEJZ40a","UtilName": "Electric","gridid": 580}
];

let expected_output = {}
data.forEach(elem => {
  if(!(elem['gridid'] in expected_output)){
    expected_output[elem['gridid']] = [{}]

  }
  if(!(elem['UtilName'] in expected_output[elem['gridid']][0])){
    expected_output[elem['gridid']][0][elem['UtilName']] = []
  }
  const j = expected_output[elem['gridid']][0][elem['UtilName']].length
  expected_output[elem['gridid']][0][elem['UtilName']][j] = {'FirstName' : elem['UtilName'],'Code' : elem['Code']}
});

console.log(expected_output)

因此,可以将expected_output[elem['gridid']] = [{}]替换为expected_output[elem['gridid']] = {},可以删除答案中的[0]

票数 2
EN

Stack Overflow用户

发布于 2022-06-15 19:20:39

下面是一个更动态的方法,您可以更改层次结构键,并在需要时添加更多:

代码语言:javascript
复制
let data = [
    {
        "FirstName": "TRACY",
        "Code": "CCI41",
        "UtilName": "Cable",
        "gridid": 570
    },
    {
        "FirstName": "ANGELA",
        "Code": "TWCZ40",
        "UtilName": "Cable",
        "gridid": 570
    },
    {
        "FirstName": "WILFORD",
        "Code": "TCE12",
        "UtilName": "Electric",
        "gridid": 570
    },
    {
        "FirstName": "COREY",
        "Code": "SCEJZ40",
        "UtilName": "Electric",
        "gridid": 570
    },
    {
        "FirstName": "ERNEST",
        "Code": "SGRAZ01",
        "UtilName": "Fiber",
        "gridid": 570
    },
    {
        "FirstName": "WILFORD",
        "Code": "TCE12",
        "UtilName": "Fiber",
        "gridid": 570
    },
    {
        "FirstName": "COREY",
        "Code": "SCGZ02",
        "UtilName": "Gas",
        "gridid": 570
    },
    {
        "FirstName": "ANGELO",
        "Code": "BSZT29",
        "UtilName": "Phone",
        "gridid": 570
    }
];
      function restructure(arr,layer1,layer2){
          let result = {};
          data.forEach(e=>{
              if(!result.hasOwnProperty(e[layer1])) result[e[layer1]] = {};
              if(!result[e[layer1]].hasOwnProperty(e[layer2])) result[e[layer1]][e[layer2]] = [];
              
              let cleanOutput = {...e};
              delete cleanOutput[layer1];
              delete cleanOutput[layer2];
              result[e[layer1]][e[layer2]].push(cleanOutput);
          });
          return result;
      }
      console.log(restructure(data,"gridid","UtilName"));

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

https://stackoverflow.com/questions/72635956

复制
相关文章

相似问题

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