面试问题小结

今天去参加了一次面试,在面试的过程当中被问到一个编码问题
========如下========
在一个数组里存放了周日至周一的一些数据,这些数据可能是连续,也可能就单独的是一个日期
要求 :
1、如果日期是连续的 比如 123 则要求输出 周一至周三。
2、如果日期是一个单数 即只有一天 则输出单个日期。
3、在一个数组中的日期可能有多个连接,或者不连续,这是未知。
如下数组:
var date = [1,2,3,5,6,7]
123……分别对应周几。 7 代表是周日,这个里面面试官想问的主要还是判断两个数是否是连续。
判断连续有两种

1. 如果第N个数+1 等于他下个元素的值 就表示这两个数是相邻,否则就是不连续。
2. 或者 第N个数+1 - 他的下个元素的值 等于0  也表示这两个数是相邻

在纸上编程的时候写了大概的判断条件 到家了之后想实际编码验证一下思路
首先 我定义了两个空的变量 分别标记开始和结束 var flagStart = ‘’, flagEnd = ‘’
然后定义了一个周日至周六的一个数组 用来把得出的结果进行匹配;
对数组进行遍历 在遍历的过程中进行条件的判断

完整代码如下:

var week = ['周日','周一','周二','周三','周四','周五','周六',],
    arr = [1,2,3,4,5,6,7],
    flagStart = '',
    flagEnd = ''; 
for(var i = 0,len = arr.length; i < len; i++) {
    if (arr[i]+1 == arr[i+1]) {
        if(flagStart == '') {
            flagStart = week[arr[i]]+'至';
        }
    }else{
        if (flagEnd == ''){
            flagEnd = week[arr[i]];
        }
        if(arr[i] === 7){
            flagEnd = week[0];
        } 
        console.log(flagStart,flagEnd);
        flagStart = '';
        flagEnd = '';
    }
}   

实际的编码过程遇到了两个小问题
有一个就是如果当中出现两个 连续的怎么输出 还有一个就是 周日为匹配数组的第一个元素
解决思路就是 在把首次匹配到的连续日期输出之后把 开始和结束标记至空 还要再判断一下 周日的情况。