簡體   English   中英

如何排序 / map / 過濾以下 javascript 對象數組從一種格式到另一種格式

[英]How can I sort / map / filter the following javascript array of objects from one format to another

我有

const daterange = ["2021-01", "2021-02", "2021-03", "2021-04", "2021-05"]

const personData = [ 
  {
    "2021-05": 3,
    "2021-04": 7,
    "2021-03": 4,
    "2021-02": 14,
    "2021-01": 7
    "person": {
        name: 'john',
        age: 33
    },
},
{
    "2021-05": 1,
    "2021-04": 2,
    "2021-03": 3,
    "2021-02": 4,
    "2021-01": 9
    "person": {
        name: 'sarah',
        age: 50
    },
},
{
    "person": {
        name: 'mark',
        age: 14
    },
},
]

我希望它看起來像這樣

const formatted = [
      {
        date: '2021-01',
        john: 7,
        sarah: 9,
        mark: 0,
      },
      {
        month: '2021-02',
        john: 14,
        sarah: 4,
        mark: 0,
      },
      ... ALL THE OTHER MONTHS IN THE daterange shown here 
      
    ],

日期范圍可能會更改,如果 personData 中沒有數據,則應為該人的每個月分配一個 0(零)值

我嘗試過在 dateRange 上進行映射,然后在 personData 中尋找匹配項(hasOwnProperty),但它不起作用。

編輯。

由於 Andreas 發牢騷,我添加了我所擁有的,但我不確定它對任何人都有幫助。 我被卡住了,這就是重點嗎?

daterange.map((date) => { 
 personData.map((person) => {
       person.hasOwnProperty(date) === true
 }
})

您需要循環數月並通過遍歷人員數據為每個月構建一個 object

    const formatted = daterange.map(month => {
      const result = {
        month,
      }
    
      personData.forEach(personData => {
        if (personData[month] != null) {
          result[personData.name] = personData[month];
        } else {
          result[personData.name] = 0;
        }
      });
    
      return result;
    })

試試這個解決方案

const format = (range, data) => {
    return range.map(month => {
        return data.reduce((prev, cur) => {
            prev[cur.person.name] = cur[month] ?? 0;
            return prev;
        }, { date: month })
    })
}

暫無
暫無

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

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