在我们日常做项目中会碰到多个期间情况下,快速筛选出有重复期间的问题。
初次遇到这个问题的想法是
比较两条为一组进行比较。12-23-34-nn。后来感觉路子行不通。一个同事正好有过类似经验。
解决方案是
每组期间都有个共同的属性,开始日和结束日。
先求出所有期间的最大开始日
在求出最小结束日
如果这个时候最小结束日依然大于最大开始日,就证明有重复期间。反之没有。
<script type="text/javascript">
var arrayList = new Array();
function TestYmd(startYmd,endYmd){
this.startYmd = startYmd;
this.endYmd = endYmd;
}
arrayList.push(new TestYmd('20160101','20161001'));
arrayList.push(new TestYmd('20160401','20161101'));
arrayList.push(new TestYmd('20160501','20160901'));
arrayList.push(new TestYmd('20160201','20161201'));
// 按结束日降序排列
arrayList.sort(function (x, y) {
return x.EndYmd.localeCompare(y.EndYmd);
});
// 取得最小结束日期
var minEndYmd = arrayList[0].EndYmd;
// 按开始日升序序排列
arrayList.sort(function (x, y) {
return x.StartYmd - y.StartYmd;
});
// 取得最大开始日期
var maxStartYmd = arrayList[0].StartYmd;
if(minEndYmd > maxStartYmd )
{
// 有重复期间
}
</script>
简陋之言,忘君勿喷。