如何使下方数据结构重组?

需求:让每一个list都有全部日期,但是原数据中没有chargeOffAmounts进行补0操作,日期顺序需一直,望解决..

以下为原数据


let arr = [
    {
      "name": "商户1",
      "list": [
        {
          "chargeOffAmounts": 12,
          "writeOffDate": "2023-02-27"
        },
        {
          "chargeOffAmounts": 2,
          "writeOffDate": "2023-03-06"
        }
      ]
    },
    {
      "name": "商户2",
      "list": [
        {
          "chargeOffAmounts": 1,
          "writeOffDate": "2023-03-05"
        }
      ]
    }
  ]

以下为所需要数据


let newArr=[
    {
      "name": "商户1",
      "list": [
        {
          "chargeOffAmounts": 12,
          "writeOffDate": "2023-02-27"
        },
        {
          "chargeOffAmounts": 0,//原始数据没有需补0操作
          "writeOffDate": "2023-03-05"
        },
        {
          "chargeOffAmounts": 2,
          "writeOffDate": "2023-03-06"
        }
      ]
    },
    {
      "name": "商户2",
      "list": [
      {
          "chargeOffAmounts": 0,//原始数据没有需补0操作
          "writeOffDate": "2023-02-27"
        },
        {
          "chargeOffAmounts": 1,
          "writeOffDate": "2023-03-05"
        },
        {
          "chargeOffAmounts": 0,//原始数据没有需补0操作
          "writeOffDate": "2023-03-06"
        }
      ]
    }
  ]

该回答引用chatgpt:测试可用


<script type="text/javascript">
let arr = [
  {
    "name": "商户1",
    "list": [
      {
        "chargeOffAmounts": 12,
        "writeOffDate": "2023-02-27"
      },
      {
        "chargeOffAmounts": 2,
        "writeOffDate": "2023-03-06"
      }
    ]
  },
  {
    "name": "商户2",
    "list": [
      {
        "chargeOffAmounts": 1,
        "writeOffDate": "2023-03-05"
      }
    ]
  }
];

// 获取所有日期列表
let dateList = Array.from(new Set(arr.flatMap(item => item.list.map(entry => entry.writeOffDate)))).sort();

// 补全日期和chargeOffAmounts字段
let newArr = arr.map(item => {
  let newList = [];
  dateList.forEach(date => {
    let entry = item.list.find(obj => obj.writeOffDate === date);
    if (entry) {
      newList.push(entry);
    } else {
      newList.push({
        chargeOffAmounts: 0,
        writeOffDate: date
      });
    }
  });
  return {
    name: item.name,
    list: newList
  };
});

console.log(newArr);</script>

img