前端黑马小扬 2023-05-12 10:49 采纳率: 50%
浏览 29
已结题

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

需求:让每一个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"
        }
      ]
    }
  ]

  • 写回答

1条回答 默认 最新

  • 瞬间的未来式 2023-05-12 10:54
    关注

    该回答引用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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月20日
  • 已采纳回答 5月12日
  • 创建了问题 5月12日