簡體   English   中英

我有一個 object 的數組,需要將其重組為所需的格式。 我嘗試使用迭代使用數組解構

[英]I have an array of object which needs to restructured into a desired format. I tried using array destructuring using iteration

所需的 output 應如下所示。 我嘗試了 object 重組方式,但我無法將其作為 object 推出。如果您能指導我,我可以使用哪些其他數組方法來獲取所需的數組

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$'}
]

我試過的是如下。 但是我不能把它變成一個 object 來推入一個空數組。

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

您可以循環遍歷sample數組,然后循環遍歷每個series數組。 創建一個group object,其中每個date作為鍵,最終 output 所需的 object 是它的值。 使用Object.values()獲取group object 的值作為數組

 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)

群組 object 如下所示:

{
  "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": {
     ....
  }

一個簡單的嵌套構造函數應該在這里工作:

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$'}]
                    }

      ];


let results = [];

for (let i = 0; i< sample[0].series.length; i++){
    //get date and 'Bike' value from first value
    let newEntry = {date : sample[0].series[i].date, bikeValue : sample[0].series[i].value};

    //find the corresponding 'Watch' value with another loop
    let watchValue = 0;

    for (let i2 = 0; i2<sample[1].series.length; i2++){
        if(sample[1].series[i2].date == newEntry.date){
            watchValue = sample[1].series[i2].value;
        }
    }

    newEntry.watchValue = watchValue;

    //push new object into results array
    results.push(newEntry);
}

console.log(results);

暫無
暫無

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

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