1.要求:
提供两个字符串每个字符串包含多个时间,格式统一为年月日时分秒,然后根据时间先后顺序排列,并且添加相应的“进店”和“出店”字段
//下面这个字符串的时间是进店
var dataList1 = "2019.05.09 17:58:31 , 2019.02.09 12:18:12 , 2019.03.09 17:40:01"
//下面这个是出店的时间
var dataList2 = "2019.05.09 18:00:39 , 2019.02.09 17:58:12 , 2019.03.09 18:00:31"
最终效果
0: {name: "进店", time: "2019.02.09 12:18:12"}
1: {name: "出店", time: "2019.02.09 17:58:12"}
2: {name: "进店", time: "2019.03.09 17:40:01"}
3: {name: "出店", time: "2019.03.09 18:00:31"}
4: {name: "进店", time: "2019.05.09 17:58:31"}
5: {name: "出店", time: "2019.05.09 18:00:39"}
实现思路:
- 两个字符串按照时间先后顺序排序所以首先的拼接到一个字符串中,进行总体上的排序
- 拼接后的字符串包含多个时间,所以用到字符串的split()进行分割成数据,分割后去掉逗号之间的空格
- 分割成数组的时间是无法进行比较,所以要把对应的时间格式转换为时间戳进行比较
- '年.月.日 时:分:秒' 这种格式的是无法转换为时间戳,所以要转换为:'年/月/日 时:分:秒'
- 比较完毕后,判断时间是否为相应的到店或者出店时间,然后添加对应的name
实现步骤:
1.合并字符串
var dataList1 = "2019.05.09 17:58:31 , 2019.02.09 12:18:12 , 2019.03.09 17:40:01"
var dataList2 = "2019.05.09 18:00:39 , 2019.02.09 17:58:12 , 2019.03.09 18:00:31"
var dataList = dataList1+','+dataList2
2.把所有的‘年.月.日’替换为‘年/月/日’,并进行分割数组
var dataListTime = dataList.replace(/\./g,'/')
var timeList = dataListTime.split(',')
3.答应timeList会发现数组中存在空格所以要去除空格
console.log(timeList)
["2019/05/09 17:58:31 ", " 2019/02/09 12:18:12 ", " 2019/03/09 17:40:01", "2019/05/09 18:00:39 ", " 2019/02/09 17:58:12 ", " 2019/03/09 18:00:31"]
//去除空格,去掉年和秒前后的空格,但是要保留天后的空格
var array = [];
for(var i = 0 ; i < timeList.length ; i++){
array.push(timeList[i].replace(/(^\s*)|(\s*$)/g, ""))
}
4.把array数组中的数据转换为时间戳
for(var i = 0 ; i < array.length ; i++){
array[i] = (new Date(array[i])).getTime()
}
5.对时间戳进行排序
array.sort(function (a, b) {
return a > b ? 1 : -1 ;
});
6.排序后的时间戳转换为‘年.月.日 时:分:秒’该格式
//封装一个方法,时间戳转换为日期
function format(time , format){
var t = new Date(time);
var tf = function(i){
return ( i < 10 ? '0' : '')+i;
};
return format.replace(/yyyy|mm|dd|hh|nn|ss/g , function(a){
switch(a){
case 'yyyy':
return tf(t.getFullYear());
break;
case 'mm':
return tf(t.getMonth()+1);
break;
case 'dd':
return tf(t.getDate());
break;
case 'hh':
return tf(t.getHours());
break;
case 'nn':
return tf(t.getMinutes());
break;
case 'ss':
return tf(t.getSeconds());
break;
}
})
}
//时间戳转换为日期
for(var i = 0 ; i < array.length ; i++){
array[i] =format(array[i], 'yyyy.mm.dd hh:nn:ss')
}
7.创建一个空数组,用来放组装后的对象,并判断时间是否在出店或者入店
var dfList = [];//最终的数据
for(var i = 0 ; i < array.length ; i++){
var obj = {}; //此申明不可置于循环外
if(dataList1.indexOf(array[i])>= 0){
obj.name="进店";
obj.time = array[i];
}
if(dataList2.indexOf(array[i])>= 0){
obj.name="出店";
obj.time = array[i];
}
dfList.push(obj)
}
以上信息即为全部步骤,控制台输出dfList就是最终效果
0: {name: "进店", time: "2019.02.09 12:18:12"}
1: {name: "出店", time: "2019.02.09 17:58:12"}
2: {name: "进店", time: "2019.03.09 17:40:01"}
3: {name: "出店", time: "2019.03.09 18:00:31"}
4: {name: "进店", time: "2019.05.09 17:58:31"}
5: {name: "出店", time: "2019.05.09 18:00:39"}