javascript - js循环问题
本文介绍了javascript - js循环问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
var getYearAndMonth = function(star,end,weekObj){
var _hash = [];
var _week = weekObj.week || [0,1,2,3,4,5,6];
var _map = ['周日','周一','周二','周三','周四','周五'];
var myDate = {
/**
* 相差多少天,用法:DateDiff('2016-04-17','2016-04-13');
*/
DateDiff: function (dateTime, dateTime2) {
var timestamp = Date.parse(dateTime);
var timestamp1 = Date.parse(dateTime2);
for(var j=0;j<_week.length;j++){
for(var i=timestamp;i<timestamp1 + 86400000;i+=86400000){
var _date = this.DateFormat(i,'YYYY-MM-DD'); // 获取所有日期
if(new Date(_date).getDay() == _week[j]){ // _week[j] 周几
var _weeKey = _map[_week[j]];
_hash[_week[j]] = {
week : _weeKey
}
}
}
}
console.log(_hash);
return _hash
},
/**
* 日期格式化,用法:DateFormat(86400000, 'YYYY-MM-DD')
*/
DateFormat: function (timestamp, format) {
var Dates = {};
Dates.digit = function (num) {
return num < 10 ? '0' + (num | 0) : num;
};
Dates.parse = function (ymd, hms, format) {
ymd = ymd.concat(hms);
format = format || (Dates.options ? Dates.options.format : config.format);
return format.replace(/YYYY|MM|DD|hh|mm|ss/g, function (str, index) {
ymd.index = ++ymd.index | 0;
return Dates.digit(ymd[ymd.index]);
});
};
var De = new Date((timestamp | 0) ? function (tamp) {
return tamp < 86400000 ? ( +new Date + tamp * 86400000) : tamp;
}(parseInt(timestamp)) : +new Date);
return Dates.parse(
[De.getFullYear(), De.getMonth() + 1, De.getDate()],
[De.getHours(), De.getMinutes(), De.getSeconds()],
format
);
}
};
return myDate.DateDiff(star,end);
};
var dataWeekArr = this.getYearAndMonth('2016-05-10','2016-08-10', {
week:[5,1,2]
});
是想在 DateDiff里的最后返回的格式是这样的
_hash = {
week : "周一",
data: ['2016-01-02','2016-06-03'] // 这里的data数组 是所有的周一的日期
}
这样的要在循环里怎么写啊 感觉就卡在这里了 不知道怎么写了 希望能得到人的解答 不胜感激
解决方案
我只把 DateDiff 的代码贴出来,其它的都没变,_hash
没用到,可以取消了。
方法一
先建了临时表,就是 _week 转换成表,键是表示星期几的数字,值是空数组,然后在循环里按 getDay() 取得的星期几从临时表里找到数组,push 日期。最后按临时表的KEY(星期几),找到对应的中文,用这个中文和表中对应的值(数组)重建一个表,就是结果。
reduce 都可以用 for 代替
DateDiff: function(dateTime, dateTime2) {
var start = Date.parse(dateTime);
var end = Date.parse(dateTime2) + 86400000;
var tmap = _week.reduce(function(r, i) {
r[i] = [];
return r;
}, {});
for (var i = start; i < end; i += 86400000) {
var week = new Date(i).getDay();
(tmap[week] || []).push(this.DateFormat(i, "YYYY-MM-DD"));
}
return Object.keys(tmap).reduce(function(r, i) {
r[_map[i]] = tmap[i];
return r;
}, {});
}
方法二
这个方法直接先把 _hash 按 _week 初始化每一项的空数组,然后在循环里通过 getDay() 的值找到对应的 _hash 的值(数组),把日期 push 进去。
DateDiff: function(dateTime, dateTime2) {
var start = Date.parse(dateTime);
var end = Date.parse(dateTime2) + 86400000;
for (var i = 0; i < _week.length; i++) {
_hash[_map[i]] = [];
}
for (var i = start; i < end; i += 86400000) {
var week = new Date(i).getDay();
(_hash[_map[week]] || []).push(this.DateFormat(i, "YYYY-MM-DD"));
}
return _hash;
}
这篇关于javascript - js循环问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文