为了账号安全,请及时绑定邮箱和手机立即绑定

JavasSript 将一个对象数组拆分为具有特定键的多个数组

JavasSript 将一个对象数组拆分为具有特定键的多个数组

Cats萌萌 2022-12-29 09:44:30
上下文:我想制作一个检查时间冲突的时间表计划器。任何帮助是极大的赞赏。具体问题:无法弄清楚如何将我的对象数组拆分为多个重复某些键的数组。我的数据集:let myCourses = [  {    course: "ee3001",    slots: [      {        day: "monday",        time: "0900-1100",      },      {        day: "tuesday",        time: "0930-1100",      },      {        day: "wednesday",        time: "1330-1530",      },    ],  },  {    course: "ee3002",    slots: [      {        day: "monday",        time: "0900-1100",      },      {        day: "thursday",        time: "0930-1130",      },    ],  },  {    course: "ee3003",    slots: [      {        day: "tuesday",        time: "0930-1100",      },      {        day: "wednesday",        time: "1330-1530",      },      {        day: "thursday",        time: "0930-1130",      },    ],  },];我想将其拆分为的数组:let newarray = [  {    course: "ee3001",    slot: {      day: "monday",      time: "0900-1100",    },  },  {    course: "ee3001",    slot: {      day: "monday",      time: "1300-1400",    },  },  ...  ...];let newArray2 = //containing info on ee3002let newArray3 = //containing info on ee3003 **注意:**要填充数据集,即。用户可以添加更多课程和时间。这样做的原因是我可以利用数组的笛卡尔积来查找所有组合。然后我可以检查给定组合中是否存在任何时间冲突。有没有更好的方法来解决这个问题?
查看完整描述

2 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

在这里,我使用 map 来遍历您的数组,在该迭代中,我再次使用 map 来遍历插槽。


 let myCourses = [

      {

        course: "ee3001",

        slots: [

          {

            day: "monday",

            time: "0900-1100",

          },

          {

            day: "tuesday",

            time: "0930-1100",

          },

          {

            day: "wednesday",

            time: "1330-1530",

          },

        ],

      },

      {

        course: "ee3002",

        slots: [

          {

            day: "monday",

            time: "0900-1100",

          },

          {

            day: "thursday",

            time: "0930-1130",

          },

        ],

      },

      {

        course: "ee3003",

        slots: [

          {

            day: "tuesday",

            time: "0930-1100",

          },

          {

            day: "wednesday",

            time: "1330-1530",

          },

          {

            day: "thursday",

            time: "0930-1130",

          },

        ],

      },

    ];

    

    const newArray=[]

    myCourses.forEach(myFunction);


    function myFunction(item, index) {

      newArray[index] = [];

      item.slots.map((child) =>

        newArray[index].push({ course: item.course, slots: child })

      );

    }



查看完整回答
反对 回复 2022-12-29
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

再见,你可以尝试使用这个例子:


let myCourses = [

      {

        course: "ee3001",

        slots: [

          {

            day: "monday",

            time: "0900-1100",

          },

          {

            day: "tuesday",

            time: "0930-1100",

          },

          {

            day: "wednesday",

            time: "1330-1530",

          },

        ],

      },

      {

        course: "ee3002",

        slots: [

          {

            day: "monday",

            time: "0900-1100",

          },

          {

            day: "thursday",

            time: "0930-1130",

          },

        ],

      },

      {

        course: "ee3003",

        slots: [

          {

            day: "tuesday",

            time: "0930-1100",

          },

          {

            day: "wednesday",

            time: "1330-1530",

          },

          {

            day: "thursday",

            time: "0930-1130",

          },

        ],

      },

    ];

    let Arrayee3001 = [];

    let array1 = myCourses.filter(course => course.course === "ee3001")

    array1[0].slots.forEach(slot => {

       let result = {};

       result.course = array1[0].course;

       result.slot = [];

       result.slot.push(slot);

       Arrayee3001.push(result);

    });

    

    console.log(Arrayee3001);

我已经myCourses根据courseid 过滤了数组。然后我为找到的每个插槽创建了一个 forEach slots,我创建了一个从数组中过滤得到的对象result,course以及当前的slot. 最后,我将这个result对象推送到名为Arrayee3001.


查看完整回答
反对 回复 2022-12-29
  • 2 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信