簡體   English   中英

轉換數據

[英]Transform the data

我有以下數據結構:

const data = [
  {
    name: 'ABC',
    salesData: [
      {
        timestamp: '2017-09-01',
        value: 10
      },
      {
        timestamp: '2017-09-02',
        value: 2
      }
    ]
  },
  {
    name: 'DEF',
    salesData: [
      {
        timestamp: '2017-09-01',
        value: 8
      },
      {
        timestamp: '2017-09-02',
        value: 3
      }
    ]
  }
];

我想將其轉換為:

[
  {
    name: 'ABC',
    '2017-09-01': 10,
    '2017-09-02': 2
  },
  {
    name: 'CDE',
    '2017-09-01': 8,
    '2017-09-02': 3
  }
]

我正在嘗試使用Underscore的Chain和Map,這讓我感到困惑。 到目前為止,我有以下內容,不確定如何根據需要編寫convertedSalesData進行轉換:

_.map(data, function(item) {
    let name = item.name;
    let salesData = item.salesData;
    let convertedSalesData = ?
})

使用ES6,您可以使用傳播語法...獲得此結果。

 const data = [{"name":"ABC","salesData":[{"timestamp":"2017-09-01","value":10},{"timestamp":"2017-09-02","value":2}]},{"name":"DEF","salesData":[{"timestamp":"2017-09-01","value":8},{"timestamp":"2017-09-02","value":3}]}] var result = data.map(function({name, salesData}) { return {name, ...Object.assign({}, ...salesData.map(({timestamp, value}) => ({[timestamp]: value})))} }) console.log(result) 

 const data = [{ name: 'ABC', salesData: [{ timestamp: '2017-09-01', value: 10 }, { timestamp: '2017-09-02', value: 2 } ] }, { name: 'DEF', salesData: [{ timestamp: '2017-09-01', value: 8 }, { timestamp: '2017-09-02', value: 3 } ] } ]; var res = data.map(function(a) { var obj = { name: a.name }; a.salesData.forEach(function(x) { obj[x.timestamp] = x.value; }) return obj; }) console.log(res); 

類似於@Nenad Vracar。 我傾向於使用“減少”:

data.map(({ name, salesData }) => ({
  name,
  ...salesData.reduce(
    (record, { timestamp, value }) => {
      record[timestamp] = value
      return record
    },
    Object.create(null)
  )
}))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM