繁体   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