首页 > 解决方案 > 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. 有没有更好的方法来解决这个问题?

标签: javascriptarraysjavascript-objectsdata-manipulationtimetable

解决方案


Ciao,您可以尝试使用以下示例:

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的. 最后,我将此对象推入名为.courseslotresultArrayee3001


推荐阅读