将嵌套对象数组转换为对象数组的最佳方法

时间:2021-01-17 14:19:59

标签: javascript arrays object

const data = [
  {
    'UTMEH5': {
      descr: {
        ordertype: 'limit',
        pair: 'XBT/USD',
        price: '5000.00000',
      },
      status: 'open',
      vol: '0.00200000',
    },
  },
  {
    '3F2TYE': {
      descr: {
        ordertype: 'limit',
        pair: 'XBT/USD',
        price: '10000.00000'
      },
      status: 'open',
      vol: '0.00200000',
    },
  },
]

const orders = data.map((order) => {
          return Object.entries(order).map(([key, value]) => ({
            orderid: key,
            pair: value['descr']['pair'],
            vol: value['vol'],
            price: value['descr']['price'],
            ordertype: value['descr']['ordertype'],
            status: value['status'],
          }))})
          
 console.log(orders)

通过上面的代码,我得到了这个:

[
  [
    {
      "orderid": "UTMEH5",
      "pair": "XBT/USD",
      "vol": "0.00200000",
      "price": "5000.00000",
      "ordertype": "limit",
      "status": "open"
    }
  ],
  [
    {
      "orderid": "3F2TYE",
      "pair": "XBT/USD",
      "vol": "0.00200000",
      "price": "10000.00000",
      "ordertype": "limit",
      "status": "open"
    }
  ]
]

但我想要这个:

[
    {
      "orderid": "UTMEH5",
      "pair": "XBT/USD",
      "vol": "0.00200000",
      "price": "5000.00000",
      "ordertype": "limit",
      "status": "open"
    },
    {
      "orderid": "3F2TYE",
      "pair": "XBT/USD",
      "vol": "0.00200000",
      "price": "10000.00000",
      "ordertype": "limit",
      "status": "open"
    }
]

对于重复的建议,我似乎可以使用 .flat(),但这似乎是获得我想要的东西的迂回方式。有没有更好更直接的方法?

1 个答案:

答案 0 :(得分:1)

对于这种情况,您可以使用 flatMap() 代替 map()

const data = [{
    'UTMEH5': {
      descr: {
        ordertype: 'limit',
        pair: 'XBT/USD',
        price: '5000.00000',
      },
      status: 'open',
      vol: '0.00200000',
    },
  },
  {
    '3F2TYE': {
      descr: {
        ordertype: 'limit',
        pair: 'XBT/USD',
        price: '10000.00000'
      },
      status: 'open',
      vol: '0.00200000',
    },
  },
]

const orders = data.flatMap((order) => Object.entries(order).map(([key, value]) => ({
  orderid: key,
  vol: value['vol'],
  status: value['status'],
  ...value['descr'], // you can use spread operator here for brevity as well
})))

console.log(orders)

相关问题