Javascript循环问题和将嵌套对象转换为数组

Javascript循环问题和将嵌套对象转换为数组,javascript,Javascript,在下面的数组中,我试图将“reporting”对象转换为一个对象数组。 下面是我如何尝试的: const data = [{ m_id: '61', reporting: { 0: { report_cd: 'L', report_category: 'Light Vehicles' }, 1: { report_cd: 'M', report_category: 'Motorcycles'

在下面的数组中,我试图将“reporting”对象转换为一个对象数组。 下面是我如何尝试的:

  const data = [{
    m_id: '61',
    reporting: {
     0: {
      report_cd: 'L',
      report_category: 'Light Vehicles'
     },
     1: {
      report_cd: 'M',
      report_category: 'Motorcycles'
     }
    }
   },
   {
    m_id: '62',
    reporting: {
     0: {
      report_cd: 'L',
      report_category: ' Extra Light Vehicles'
     },
     1: {
      report_cd: 'M',
      report_category: 'Bike'
     },
     2: {
      report_cd: 'H',
      report_category: 'Extra Heavy'
     }
    }
   }
  ];

  var arr = [];
  for (let j = 0; j < data.length; j++) {
   let keys = Object.keys(data[j].reporting);

   for (var i = 0, n = keys.length; i < n; i++) {
    var key = keys[i];
    arr[key] = data[j].reporting[key];
   }
   data[j].reporting = arr;
  }
  console.log(data);
预期产出:

[{
 "m_id": "61",
 "reporting": [{
  "report_cd": "L",
  "report_category": "Light Vehicles"
 }, {
  "report_cd": "M",
  "report_category": "Motorcycles"
 }]
}, {
 "m_id": "62",
 "reporting": [{
  "report_cd": "L",
  "report_category": " Extra Light Vehicles"
 }, {
  "report_cd": "M",
  "report_category": "Bike"
 }, {
  "report_cd": "H",
  "report_category": "Extra Heavy"
 }]
}]

代码的问题在于,由于数组是引用类型,在第二次迭代中使用相同的数组(
var arr
),因此也会修改第一个对象的
报告
数组

使用
映射
对象的替代方法。值

const数据=[{
m_id:'61',
报告:{
0: {
报告光盘:“L”,
报告类别:“轻型车辆”
},
1: {
报告光盘:“M”,
报告类别:“摩托车”
}
}
},
{
m_id:'62',
报告:{
0: {
报告光盘:“L”,
报告类别:“超轻型车辆”
},
1: {
报告光盘:“M”,
报告类别:“自行车”
},
2: {
报告光盘:“H”,
报告类别:“超重型”
}
}
}
];
const result=data.map(el=>({…el,reporting:Object.values(el.reporting)}))

console.log(result)
代码的问题是,由于数组是引用类型,在第二次迭代中使用相同的数组(
var arr
),因此也会修改第一个对象的
报告
数组

使用
映射
对象的替代方法。值

const数据=[{
m_id:'61',
报告:{
0: {
报告光盘:“L”,
报告类别:“轻型车辆”
},
1: {
报告光盘:“M”,
报告类别:“摩托车”
}
}
},
{
m_id:'62',
报告:{
0: {
报告光盘:“L”,
报告类别:“超轻型车辆”
},
1: {
报告光盘:“M”,
报告类别:“自行车”
},
2: {
报告光盘:“H”,
报告类别:“超重型”
}
}
}
];
const result=data.map(el=>({…el,reporting:Object.values(el.reporting)}))

console.log(result)
您可以使用Object.keys为数据对象内的报表创建数组

const数据=[{
m_id:'61',
报告:{
0: {
报告光盘:“L”,
报告类别:“轻型车辆”
},
1: {
报告光盘:“M”,
报告类别:“摩托车”
}
}
},
{
m_id:'62',
报告:{
0: {
报告光盘:“L”,
报告类别:“超轻型车辆”
},
1: {
报告光盘:“M”,
报告类别:“自行车”
},
2: {
报告光盘:“H”,
报告类别:“超重型”
}
}
}
];
const result=data.map(x=>({
…x,
报告:Object.keys(x.reporting).map(key=>x.reporting[key])
}))

console.log(result)
您可以使用Object.keys为数据对象内的报表创建数组

const数据=[{
m_id:'61',
报告:{
0: {
报告光盘:“L”,
报告类别:“轻型车辆”
},
1: {
报告光盘:“M”,
报告类别:“摩托车”
}
}
},
{
m_id:'62',
报告:{
0: {
报告光盘:“L”,
报告类别:“超轻型车辆”
},
1: {
报告光盘:“M”,
报告类别:“自行车”
},
2: {
报告光盘:“H”,
报告类别:“超重型”
}
}
}
];
const result=data.map(x=>({
…x,
报告:Object.keys(x.reporting).map(key=>x.reporting[key])
}))

console.log(result)
Why not
Object.keys(x.reporting).map(key=>x.reporting[key])
应用了建议的更改Why not
Object.keys(x.reporting).map(key=>x.reporting[key])
应用了建议的更改
[{
 "m_id": "61",
 "reporting": [{
  "report_cd": "L",
  "report_category": "Light Vehicles"
 }, {
  "report_cd": "M",
  "report_category": "Motorcycles"
 }]
}, {
 "m_id": "62",
 "reporting": [{
  "report_cd": "L",
  "report_category": " Extra Light Vehicles"
 }, {
  "report_cd": "M",
  "report_category": "Bike"
 }, {
  "report_cd": "H",
  "report_category": "Extra Heavy"
 }]
}]