今天去参加了一次面试,在面试的过程当中被问到一个编码问题
========如下========
在一个数组里存放了周日至周一的一些数据,这些数据可能是连续,也可能就单独的是一个日期
要求 :
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 = '';
}
}
实际的编码过程遇到了两个小问题
有一个就是如果当中出现两个 连续的怎么输出 还有一个就是 周日为匹配数组的第一个元素
解决思路就是 在把首次匹配到的连续日期输出之后把 开始和结束标记至空 还要再判断一下 周日的情况。