首页 > 解决方案 > 按键对对象中的数组进行分组

问题描述

我对我的日常对象进行分组时遇到了问题,我测试了很多方法,但没有成功,我不知道我是否可以用 lodash 或 underscorejs 做到这一点。如果有人可以帮助我,我已经坚持了几天。有谁知道这个的解决方案?

const schedules = {
Friday : [
 {isOpen: true},
 {morningOpen: "08:30"},
 {morningClose: "12:00"},
 {afternoonOpen: "18:30"},
 {afternoonClose: "18:30"}
],
Monday : [
 {isOpen: true},
 {morningOpen: "08:30"},
 {morningClose: "12:00"},
 {afternoonOpen: "18:30"},
 {afternoonClose: "18:30"}
],
Saturday : [
 {isOpen: true},
 {morningOpen: "08:30"},
 {morningClose: "12:00"},
 {afternoonOpen: "20:30"},
 {afternoonClose: "20:30"}
]
Sunday : [
 {isOpen: true},
 {morningOpen: "08:30"},
 {morningClose: "12:00"},
 {afternoonOpen: "20:30"},
 {afternoonClose: "20:30"}
],
Thursday : [
 {isOpen: true},
 {morningOpen: "08:30"},
 {morningClose: "12:00"},
 {afternoonOpen: "18:30"},
 {afternoonClose: "18:30"}
],
Tuesday : [
 {isOpen: true},
 {morningOpen: "08:30"},
 {morningClose: "12:00"},
 {afternoonOpen: "18:30"},
 {afternoonClose: "18:30"}
],
Wednesday : [
 {isOpen: true},
 {morningOpen: "08:30"},
 {morningClose: "12:00"},
 {afternoonOpen: "18:30"},
 {afternoonClose: "18:30"}
];

我想要这个列出我的日子

schedules1 : [
 {isOpen: true},
 {morningOpen: "08:30"},
 {morningClose: "12:00"},
 {afternoonOpen: "18:30"},
 {afternoonClose: "18:30"},
 {days: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
],

schedule2 : [
 {isOpen: true},
 {morningOpen: "08:30"},
 {morningClose: "12:00"},
 {afternoonOpen: "20:30"},
 {afternoonClose: "20:30"},
 {days: ["Sunday", "Saturday"]
];

谢谢

标签: javascriptarraysobject

解决方案


const schedules = {
  Friday: {
    isOpen: true,
    morningOpen: "08:30",
    morningClose: "12:00",
    afternoonOpen: "18:30",
    afternoonClose: "18:30"
  },
  Monday: {
    isOpen: true,
    morningOpen: "08:30",
    morningClose: "12:00",
    afternoonOpen: "18:30",
    afternoonClose: "18:30"
  },
  Saturday: {
    isOpen: true,
    morningOpen: "08:30",
    morningClose: "12:00",
    afternoonOpen: "20:30",
    afternoonClose: "20:30"
  },
  Sunday: {
    isOpen: true,
    morningOpen: "08:30",
    morningClose: "12:00",
    afternoonOpen: "20:30",
    afternoonClose: "20:30"
  },
  Thursday: {
    isOpen: true,
    morningOpen: "08:30",
    morningClose: "12:00",
    afternoonOpen: "18:30",
    afternoonClose: "18:30"
  },
  Tuesday: {
    isOpen: true,
    morningOpen: "08:30",
    morningClose: "12:00",
    afternoonOpen: "18:30",
    afternoonClose: "18:30"
  },
  Wednesday: {
    isOpen: true,
    morningOpen: "08:30",
    morningClose: "12:00",
    afternoonOpen: "18:30",
    afternoonClose: "18:30"
  },
}

const groups = []

function getOrCreateGroup(schedule) {
  for (const group of groups) {
    if (
      group.isOpen === schedule.isOpen &&
      group.morningOpen === schedule.morningOpen &&
      group.morningClose === schedule.morningClose &&
      group.afternoonOpen === schedule.afternoonOpen &&
      group.afternoonClose === schedule.afternoonClose
    ) {
      return group
    }
  }
  const newGroup = {
    ...schedule,
    days: [],
  }
  groups.push(newGroup)
  return newGroup
}


for (const key in schedules) {
  const schedule = schedules[key]
  const group = getOrCreateGroup(schedule)
  group.days.push(key)
}

console.log(groups)


推荐阅读