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

上下文:我想制作一个检查时间冲突的时间表计划器。任何帮助是极大的赞赏。


具体问题:无法弄清楚如何将我的对象数组拆分为多个重复某些键的数组。


我的数据集:


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 ee3002

let newArray3 = //containing info on ee3003 

**注意:**要填充数据集,即。用户可以添加更多课程和时间。

  1. 这样做的原因是我可以利用数组的笛卡尔积来查找所有组合。

  2. 然后我可以检查给定组合中是否存在任何时间冲突。

  3. 有没有更好的方法来解决这个问题?


Cats萌萌
浏览 126回答 2
2回答

米琪卡哇伊

在这里,我使用 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 })      );    }

蝴蝶刀刀

再见,你可以尝试使用这个例子: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.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript