首页 > 解决方案 > 我有一个需要重组为所需格式的对象数组。我尝试使用迭代使用数组解构

问题描述

所需的输出应如下所示。我尝试了对象重组方式,但我无法将其作为对象推出。如果您能指导我,我可以使用哪些其他数组方法来获取所需的数组

const sample = [
  {
    name: 'Bike',
    series: [
      { date: '01-01-2020', value: '4$' },
      { date: '02-01-2020', value: '3$' },
      { date: '03-01-2020', value: '3.5$' }
    ]
  },
  {
    name: 'Watch',
    series: [
      { date: '01-01-2020', value: '1$' },
      { date: '02-01-2020', value: '2$' },
      { date: '03-01-2020', value: '5$' }
    ]
  }
]

const output = [
  { date: '01-01-2020', 'bike-value': '4$', 'watch-value': '1$' },
  { date: '02-01-2020', 'bike-value': '3$', 'watch-value': '2$' },
  { date: '03-01-2020', 'bike-value': '3.5$', 'watch-value': '5$'}
]

我尝试如下。但我不能把它变成一个对象来推入一个空数组。

for (const {name: n, series: [{date: d , value: v}]} of sample) {
  console.log('name: ' + n + ', date: ' + d + ', value: ' + v);
}

标签: javascriptarraysmultidimensional-array

解决方案


您可以遍历sample数组,然后遍历每个series数组。创建一个group对象,每个对象都date作为键,最终输出中需要的对象是值。用于以数组Object.values()形式获取对象的值group

const sample=[{name:"Bike",series:[{date:"01-01-2020",value:"4$"},{date:"02-01-2020",value:"3$"},{date:"03-01-2020",value:"3.5$"}]},{name:"Watch",series:[{date:"01-01-2020",value:"1$"},{date:"02-01-2020",value:"2$"},{date:"03-01-2020",value:"5$"}]}];
 
const group = {} 

for (const { name, series } of sample) {
  for (const { date, value } of series) {
    group[date] = group[date] || { date };
    group[date][`${name.toLowerCase()}-value`] = value
  }
}

const output = Object.values(group)

console.log(output)

组对象如下所示:

{
  "01-01-2020": {
    "date": "01-01-2020",
    "bike-value": "4$",
    "watch-value": "1$"
  },
  "02-01-2020": {
    "date": "02-01-2020",
    "bike-value": "3$",
    ...
   },
  "03-01-2020": {
     ....
  }

推荐阅读