扁平化具有嵌套对象的多个对象的数组

问题描述

我想要做的这个特别的期望结果原来是对刚开始编程的人所期望的挑战。

我将API查询的结果存储在如下所示的数组变量中:

[{
  balance: 4444,playerInfo: {
    age: "18",gender: "Male",level: "2",name: "Joe"
  }
},{
  balance: 3333,playerInfo: {
    age: "45",level: "3",name: "Angel"
  }
},{
  balance: 2222,playerInfo: {
    age: "20",gender: "Female",level: "11",name: "Luce"
  }
}]

我想要的结果是:

[{
  balance: 4444,name: "Joe"
},name: "Angel"
},name: "Luce"
}]

在flat和flatMap方面,我取得了一些小的进展,但是由于目标对象可能正在使用过时的浏览器,因此我不确定它是否是兼容的正确方法

其他一些答案的逻辑对我来说很难理解atm,因此请多加注意以防万一

谢谢!

解决方法

您可以使用Array.mapObject destructuring

let data = [{balance:4444,playerInfo:{age:"18",gender:"Male",level:"2",name:"Joe"}},{balance:3333,playerInfo:{age:"45",level:"3",name:"Angel"}},{balance:2222,playerInfo:{age:"20",gender:"Female",level:"11",name:"Luce"}}]

const formatData = (data) => {
  return data.map(({balance,playerInfo}) => ({
    balance,level: playerInfo.level,name: playerInfo.name
  }))
}

console.log(formatData(data))

let data = [{balance:4444,name:"Luce"}}]

const formatData = (data) => {
  return data.map(({ balance,playerInfo: { level,name }}) => ({
    balance,level,name
  }))
}

console.log(formatData(data));

,

您可以直接使用map方法进行转换。

let input = [{
  balance: 4444,playerInfo: {
    age: "18",gender: "Male",level: "2",name: "Joe"
  }
},{
  balance: 3333,playerInfo: {
    age: "45",level: "3",name: "Angel"
  }
},{
  balance: 2222,playerInfo: {
    age: "20",gender: "Female",level: "11",name: "Luce"
  }
}];
let output = input.map(obj => ({
  balance: obj.balance,level: obj.playerInfo?.level,name: obj.playerInfo?.name,}));

console.log(output);

,

这简直就是'甜蜜':

let rawData = [{
  balance: 4444,name: "Luce"
  }
}]

let formattedData =
  rawData.map(({
    balance,playerInfo: {
      level,name
    }
  }) => ({ balance,name }))

console.log(formattedData)