js 数组对象格式转换问题

后端传给我这种类型的数组:

已知固定的name为11,22

[
  {
    date: "2021-09",
    name: "11",
    num: 444
  },
  {
    date: "2021-09",
    name: "22",
    num: 555
  },
  {
    date: "2021-10",
    name: "11",
    num: 123
  },
  {
    date: "2021-10",
    name: "22",
    num: 245
  }
]

需求一: 
要求格式转换成如下:

[
  {
    date: "2021-09",
    name: ['11', '22'],
    num: ['444','555']
  },
  {
    date: "2021-10",
    name: ['11', '22'],
    num: ['123','245']
  }
]

需求二:如果后端传过来的数据缺失,则要补全:

例如后端传过来这种9月份缺失name的数据:

[
  {
    date: "2021-09",
    name: "11",
    num: 444
  },
  {
    date: "2021-10",
    name: "11",
    num: 123
  },
  {
    date: "2021-10",
    name: "22",
    num: 245
  }
]

则依然要转换成需求一那种格式,并补全缺少的name值为0:

[
  {
    date: "2021-09",
    name: ['11', '22'],
    num: ['444','0']
  },
  {
    date: "2021-10",
    name: ['11', '22'],
    num: ['123','245']
  }
]

需求三(类似需求二):如果后端传过来的数据缺失,则要补全:

例如后端传过来缺失整个月份的数据,则依然要补全月份:
[
  {
    date: "2021-09",
    name: "11",
    num: 444
  },
  {
    date: "2021-11",
    name: "11",
    num: 123
  },
  {
    date: "2021-11",
    name: "22",
    num: 245
  }
]

补全转换的格式:
[
  {
    date: "2021-09",
    name: ['11', '22'],
    num: ['444','0']
  },
  {
    date: "2021-10",
    name: ['11', '22'],
    num: ['0','0']
  },
  {
    date: "2021-11",
    name: ['11', '22'],
    num: ['123','245']
  }
]

先从数据提取出唯一的date和name放数组升序排列下,对date遍历补全丢失的日期。然后遍历date转换成新数据格式

说实话,数据补全这个活,数据库干起来得心应手,程序干起来事倍功半

格式转换很简单,数据补全很麻烦