js根据对象属性合并多个list到一个list中

    let list1 = [{name:"张三",time:"20220101"},{name:"李四",time:"20220102"},{name:"王五",time:"20220103"}]
    let list2 = [{name:"翰林",time:"20220103"},{name:"拔客",time:"20220105"},{name:"水煮",time:"20220106"}]
    let list3 = [{name:"清蒸",time:"20220101"},{name:"赵六",time:"20220102"},{name:"清白",time:"20220103"},{name:"小白",time:"20220104"}]
    let list4 = [{name:"养鱼",time:"20220101"},{name:"随便",time:"20220105"}]

按照时间属性,合并成这样

    let list = [{list1_name:"张三",list3_name:"清蒸",list4_name:"养鱼",time:"20220101"},
      {list1_name:"李四",list3_name:"赵六",time:"20220102"},
      {list1_name:"王五",list2_name:"翰林",list3_name:"清白",time:"20220103"}
      ,{list3_name:"小白",time:"20220104"},{list2_name:"拔客",list4_name:"随便",time:"20220105"},
      {list2_name:"水煮",time:"20220106"}]

如何操作


    <script>
      function listName(name, arr) {
        arr.forEach((item) => {
          item[item.name + item.time] = name;
        });
        return arr;
      }
      let list1 = [
        { name: "张三", time: "20220101" },
        { name: "李四", time: "20220102" },
        { name: "王五", time: "20220103" },
      ];
      let list2 = [
        { name: "翰林", time: "20220103" },
        { name: "拔客", time: "20220105" },
        { name: "水煮", time: "20220106" },
      ];
      let list3 = [
        { name: "清蒸", time: "20220101" },
        { name: "赵六", time: "20220102" },
        { name: "清白", time: "20220103" },
        { name: "小白", time: "20220104" },
      ];
      let list4 = [
        { name: "养鱼", time: "20220101" },
        { name: "随便", time: "20220105" },
      ];
      list1 = listName("list1_name", list1);
      list2 = listName("list2_name", list2);
      list3 = listName("list3_name", list3);
      list4 = listName("list4_name", list4);
      const list = [...list1, ...list2, ...list3, ...list4];
      const newList = [];
      let map = new Map();
      for (let item of list) {
        if (!map.has(item["time"])) {
          map.set(item["time"], item);
        }
      }
      const newKey = [...map.keys()];
      newKey.forEach((item) => {
        const itemArr = {};
        list.forEach((e) => {
          item == e.time ? (itemArr[e[e.name + e.time]] = e.name) : "";
        });
        itemArr.time = item;
        newList.push(itemArr);
      });
      console.log(newList);
    </script>

img