javascript - 我将如何简化包含 "working hours"的对象?

标签 javascript

我有一个对象,其中包含为一周中的每一天指定的办公时间/工作时间。 我的目标是能够简化对象的文本输出,而无需重复与前一天工作时间相同的不必要的工作日。

当前输出如下:

Monday: 08:00 AM - 21:00 PM
Tuesday: 08:00 AM - 21:00 PM
Wednesday: 08:00 AM - 21:00 PM
Thursday: 08:00 AM - 21:00 PM
Friday: 08:00 AM - 21:00 PM
Saturday: 08:00 AM - 18:00 PM

我正在执行以下操作以显示每天工作时间的文本输出(它应该跳过任何开始和结束时间设置为 00:00 AM 的日子 - 例如星期日 ):

// Office hours object
const json_office_hours = '{"Monday":{"start":"08:00 AM","end":"21:00 PM"},"Tuesday":{"start":"08:00 AM","end":"21:00 PM"},"Wednesday":{"start":"08:00 AM","end":"21:00 PM"},"Thursday":{"start":"08:00 AM","end":"21:00 PM"},"Friday":{"start":"08:00 AM","end":"21:00 PM"},"Saturday":{"start":"08:00 AM","end":"18:00 PM"},"Sunday":{"start":"00:00 AM","end":"00:00 AM"}}';
const office_hours = JSON.parse(json_office_hours);


// Iteration
let office_hours_text = "";
let oh_prev_day = "Monday";
for (let day in office_hours) {
  if (office_hours.hasOwnProperty(day)) {
    let oh_start = office_hours[day].start;
    let oh_end = office_hours[day].end;

    if (oh_start !== '00:00 AM' && oh_end !== '00:00 AM') {
      office_hours_text += day + ": " + oh_start + " - " + oh_end + '\n';
    }
    oh_prev_day = day;
  }
}

console.log(office_hours_text);

我试图实现的简化输出如下:

Monday - Friday: 08:00 AM - 21:00 PM
Saturday: 08:00 AM - 18:00 PM

出于某种原因,我无法全神贯注于简化输出。

非常感谢您的帮助 - 谢谢。

最佳答案

这是一个相当简洁的解决方案,它根据之前的时间段进行分组,如果一天有偏差,它会创建一个新的时间段。

const json_office_hours = '{"Monday":{"start":"08:00 AM","end":"21:00 PM"},"Tuesday":{"start":"08:00 AM","end":"21:00 PM"},"Wednesday":{"start":"10:00 AM","end":"21:00 PM"},"Thursday":{"start":"08:00 AM","end":"21:00 PM"},"Friday":{"start":"08:00 AM","end":"21:00 PM"},"Saturday":{"start":"08:00 AM","end":"18:00 PM"},"Sunday":{"start":"00:00 AM","end":"00:00 AM"}}';
const office_hours = JSON.parse(json_office_hours);

let periods = [], p;
for (const [day, { start, end }] of Object.entries(office_hours)) {
  if (start === '00:00 AM' || end === '00:00 AM') continue;

  if (!p || p.start !== start || p.end !== end) {
    p = { start, end, days: [day] };
    periods.push(p);
  } else {
    p.days[1] = day;
  }
}

for (const { days, start, end } of periods) {
  const out = `${days.join(' - ')}: ${start} - ${end}`
  console.log(out)
}

关于javascript - 我将如何简化包含 "working hours"的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70304809/

相关文章:

javascript - datetimepicker 无法与 bootstrap 4 一起使用?

javascript - 如何在使用 jsPDF 时跳过某一列

javascript - ExpressJs + Passport.js + MySQL 身份验证

javascript - 内容/div slider 不工作

javascript - 错误 : incompatible types: MainActivity cannot be converted to FragmentActivity . 添加包(新 ReactDatePackage(本))

javascript - 为什么没有设置线宽?

php - 我的 javascript 卡住了屏幕,没有错误,只是导航器不起作用

javascript - 如何清除 react native 缓存?

javascript - 随着浏览器调整大小更改文本

javascript - 动态更新和 AngularJS