我正在寻找一种“好的”方式来显示某个地点的营业时间。
我给出了一个数组,其中包含这样的开放时间:
map[1] = '10:00 - 18:00';
map[2] = '10:00 - 18:00';
map[3] = '09:00 - 18:00';
map[4] = '10:00 - 18:00';
map[5] = '10:00 - 18:00';
map[6] = '12:00 - 23:00';
并且想要像这里一样获得给定数组的输出:
Mo - Tu: 10:00 - 18:00
Wednesday: 09:00 - 18:00
Th - Fr: 10:00 - 18:00
Saturday: 12:00 - 23:00
Sunday: Closed
在这种情况下,星期天是关闭的,因为缺少 map[0]。
最佳答案
这个比较短。
以索引7为哨兵,循环一次得到输出。
DEMO .
function foo( map ) {
var names = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
var output = [];
var lastidx = 0;
var lastcont = map[0];
for (var i = 0; i <= 7; ++i) {
if( map[i] != lastcont || 7 == i) {
lastcont = lastcont || "Closed";
if( (i - 1) - lastidx > 0 ) {
output.push( names[lastidx].slice(0,2)+" - "+names[i-1].slice(0,2)+": "+lastcont);
}
else {
output.push( names[lastidx]+": "+lastcont);
}
lastidx = i;
lastcont = map[i];
}
};
return output;
}
周一先更新
function foo( map ) {
var mapc = map.slice();
mapc['7'] = mapc['0'];
var names = ["", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
var output = [];
var lastidx = 1;
var lastcont = mapc[lastidx];
for (var i = lastidx; i <= 8; ++i) {
if( mapc[i] != lastcont || 8 == i) {
lastcont = lastcont || "Closed";
if( (i - 1) - lastidx > 0 ) {
output.push( names[lastidx].slice(0,2)+" - "+names[i-1].slice(0,2)+": "+lastcont);
}
else {
output.push( names[lastidx]+": "+lastcont);
}
lastidx = i;
lastcont = mapc[i];
}
}
return output;
}
关于javascript - 显示开放时间算法javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22417269/