我有一个对象:
var daysMapping = { 1: "MON", 2: "TUE", 3: "WED", 4: "THU", 5: "FRI", 6: "SAT", 7: "SUN" };
和一系列对象:
var timingsArr = [{ StartTime: "09:00:00", EndTime: "13:00:00", Days: [2,3,4,5] },
{ StartTime: "16:00:00", EndTime: "19:00:00", Days: [2,3,4,5,6]},
{ StartTime: "09:00:00", EndTime: "14:00:00", Days: [6,7] }];
我需要按以下方式分组时间:
TUE - FRI
上午9:00 - 下午1:00
下午4:00 - 晚上7:00
SAT
上午9:00 - 下午2:00
下午4:00 - 晚上7:00
SUN
上午9:00 - 下午2:00
我需要在javascript中编写代码才能获得这样的时间。这里我需要工作日的数据。如果某些日子的时间相同,那么这些时间可以分组。但是,任何语言都接受解决方案。
答案 0 :(得分:1)
这是一项尝试将相同时间分组到日期组的提案。
它使用对象grouped
表示具有时间的日期,稍后使用数组combined
作为结果集。
我跳过了改变12h时钟显示的部分。
var daysMapping = { 1: "MON", 2: "TUE", 3: "WED", 4: "THU", 5: "FRI", 6: "SAT", 7: "SUN" },
days = ["MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"],
timingsArr = [{ StartTime: "09:00:00", EndTime: "13:00:00", Days: "[2,3,4,5]" }, { StartTime: "16:00:00", EndTime: "19:00:00", Days: "[2,3,4,5,6]" }, { StartTime: "09:00:00", EndTime: "14:00:00", Days: "[6,7]" }],
grouped = {},
combined = [];
timingsArr.forEach(function (a) {
var days = JSON.parse(a.Days).forEach(function (d) {
grouped[daysMapping[d]] = grouped[daysMapping[d]] || [];
grouped[daysMapping[d]].push(a.StartTime + ' ' + a.EndTime);
});
});
days.forEach(function (day, i) {
if (!i || JSON.stringify(this.last.data) !== JSON.stringify(grouped[day])) {
this.last = { days: [day], data: grouped[day] };
combined.push(this.last);
return;
}
this.last.days[1] =day;
}, {});
combined.forEach(function (a) {
var p;
if (a.data) {
a.data.sort();
p = document.createElement('p');
p.innerHTML = '<strong>' + a.days.join(' - ') + '</strong><br>' + a.data.join('<br>');
document.body.appendChild(p);
}
});