gpt4 book ai didi

javascript - 如何合并营业时间相似的日子

转载 作者:行者123 更新时间:2023-11-30 12:23:10 25 4
gpt4 key购买 nike

我正在尝试编写一个 javascript 函数来将商店营业时间相似的日期合并在一起。例如,如果我们有:

“小时”:[“星期五上午 11:00 - 下午 3:00,下午 5:00 - 晚上 10:00”,“星期一上午 11:00 - 下午 3:00,下午 5:00 - 晚上 9:30”,“周六中午 12:00 - 晚上 10:00”,“周日中午 12:00 - 晚上 9:30”,“星期四上午 11:00 - 下午 3:00,下午 5:00 - 晚上 9:30”,“星期二上午 11:00 - 下午 3:00,下午 5:00 - 晚上 9:30”,“星期三上午 11:00 - 下午 3:00,下午 5:00 - 晚上 9:30”],

我希望代码将其简化为:

“小时”:[“Mo-Sa 11:00-14:30”,“周一至周四 17:00-21:30”,“周五至周六 17:00-22:00”],

有没有一种方法可以在不使用一长串 if/elsecase 语句的情况下实现这一点?

最佳答案

发挥功能并避免大量困惑。

假设这是你的数据:

var data = [
{day: "Mon", open: 900, close: 1700},
{day: "Tue", open: 900, close: 1700},
{day: "Wed", open: 700, close: 1700},
{day: "Thu", open: 900, close: 1700},
{day: "Fri", open: 900, close: 1700},
{day: "Sat", open: 900, close: 1900},
{day: "Sun", open: 900, close: 1900},
];

您可以在 6 行代码中简单地将数组reduce 为合并数组:

var merged = data.reduce(function(preVal, curVal) {
var last = preVal[preVal.length - 1];
if (last && last.open == curVal.open && last.close == curVal.close) {
last.endDay = curVal.day;
} else {
preVal.push(curVal);
}
return preVal;
}, []);

以防调试:

for (var i in merged) {
var m = merged[i];
var endDay = m.endDay ? " to " + m.endDay : "";
console.log(m.day + endDay + " " + m.open + "-" + m.close);
}

奖励 现在,如果您必须将 merged 转换为不同的格式(例如,您需要在屏幕上打印的内容),您可以再次运行并且 map 合并成你想要的任何格式:

var mergedNewFormat = merged.map(function(v) { 
return {
days: [v.day, v.endDay ? v.endDay : v.day],
hours: [v.open, v.close],
};
});

关于javascript - 如何合并营业时间相似的日子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30361551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com