javascript - 显示开放时间算法javascript

标签 javascript algorithm

我正在寻找一种“好的”方式来显示某个地点的营业时间。

我给出了一个数组,其中包含这样的开放时间:

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/

相关文章:

javascript - 无法从 JQuery 生成的 HTML 中检索数据属性

JavaScript localStorage 返回 1?

Javascript:如何将不同的对象传递给循环中创建的 setTimeout 处理程序?

c++ - Kruskal 的 MST 算法的这段代码如何工作?

algorithm - 在 Weka 中使用聚类进行预测

javascript - 在屏幕中间叠加位置和淡入淡出

javascript - MVC 模式中 Ajax 中 GET/POST/PUT/DELETE 之间的区别

c# - 获取所有项目组合

python - 在python中将列表转换为矩阵

算法 - 对两个数进行二次幂分区