迭代嵌套的对象数组以创建新对象

问题描述 投票:0回答:1

我有一个嵌套的对象数组,看起来像这样:

[
 [
  {
   name: 'name',
   prettyFormat: 'joe bloggs'
   uselessInfo: 'drjfghsdr'
  },
  {
   name: 'email',
   answer: '[email protected]',
   uselessInfo: 'liodrgjiwe'
  }
 ]
 [
  {
   name: 'name',
   prettyFormat: 'mark obrien',
   uselessInfo: 'drjfghsdr'
  },
  {
   name: 'email',
   answer: 'mark [email protected]',
   uselessInfo: 'liodrgjiwe'
  }
 ]
]

我需要将这个数组转换成更合理的东西,实际上是一个 JSON 对象,格式如下:

{
  "LIST": [
    {
      "name": "joe bloggs",
      "email": "[email protected]",
    },
    {
      "name": "mark o'brien",
      "email": "mark [email protected]",

    },
  ]
}

这是我的解决方案:

  let outputBuilder = []

  staffSubmissionsArray.forEach(subArray => {
    let personObj = {}
    subArray.forEach(obj => {
      if (obj.name == 'name') {
        personObj['name'] = obj.prettyFormat
      } if (obj.name == 'email') {
        personObj['email'] = obj.answer
      } 
      outputBuilder.push(personObj)
    })
  })

  console.log(JSON.stringify({ "LIST" : outputBuilder })

这使所有内容都变成正确的格式,但是,每个人都会被复制,大概每次我迭代每个对象时,但我不知道如何解决这个问题。我需要以不同的方式处理这个问题吗?

javascript
1个回答
0
投票

也许你可以尝试使用

map
reduce
:

const data = [
  [
    {
      name: 'name',
      prettyFormat: 'joe bloggs',
      uselessInfo: 'drjfghsdr'
    },
    {
      name: 'email',
      answer: '[email protected]',
      uselessInfo: 'liodrgjiwe'
    }
  ],
  [
    {
      name: 'name',
      prettyFormat: 'mark obrien',
      uselessInfo: 'drjfghsdr'
    },
    {
      name: 'email',
      answer: 'mark [email protected]',
      uselessInfo: 'liodrgjiwe'
    }
  ]
];

const transformedData = {
  LIST: data.map(innerArray => 
    innerArray.reduce((acc, item) => {
      if (item.name === 'name') {
        acc.name = item.prettyFormat;
      } else if (item.name === 'email') {
        acc.email = item.answer;
      }
      return acc;
    }, {})
  )
};

console.log(JSON.stringify(transformedData, null, 2));

© www.soinside.com 2019 - 2024. All rights reserved.