请参阅下面的对象结构。我试图将每个日期与一天中30分钟半小时间隔的固定数组进行比较,然后创建一个新对象,其中“处理”由
总和以下确实正确地映射到“hhObj”中的正确间隔但是它只是每半小时聚合一次,然后为每个“weekDay”重复。
//我要构建的主对象数组
var hhObj = [];
//修正了一天中所有半小时间隔的数组
var halfHours = ["00:00", "00:30", "01:00", "01:30", "02:00", "02:30", "03:00", "03:30", "04:00", "04:30", "05:00", "05:30", "06:00", "06:30", "07:00", "07:30", "08:00", "08:30", "09:00", "09:30", "10:00", "10:30", "11:00", "11:30", "12:00", "12:30", "13:00", "13:30", "14:00", "14:30", "15:00", "15:30", "16:00", "16:30", "17:00", "17:30", "18:00", "18:30", "19:00", "19:30", "20:00", "20:30", "21:00", "21:30", "22:00", "22:30", "23:00", "23:30"]
//为每半小时间隔创建具有键对值的对象
var intervalObj = [];
for (i = 0; i < halfHours.length; i++) {
intervalObj.push({
interval: halfHours[i],
answered: 0,
handled: 0
})
}
//将上述间隔对象添加到每个工作日对象
for (i = 1; i <= 5; i++) {
hhObj.push({
day: i,
data: intervalObj
})
}
//从
中提取数据的对象 var test = [
{"DateTime":"5/1/18 03:00:00 AM","Answered":"0","handled":"3"},
{"DateTime":"5/3/18 10:00:00 AM","Answered":"0","handled":"1"},
{"DateTime":"5/2/18 07:00:00 AM","Answered":"0","handled":"25"},
{"DateTime":"5/5/18 12:00:00 AM","Answered":"0","handled":"2"},
{"DateTime":"5/10/18 12:00:00 AM","Answered":"0","handled":"6"},
{"DateTime":"5/12/18 07:00:00 AM","Answered":"0","handled":"1"},
{"DateTime":"5/13/18 12:00:00 AM","Answered":"0","handled":"12"},
{"DateTime":"5/1/18 07:00:00 AM","Answered":"0","handled":"5"},
{"DateTime":"5/6/18 10:00:00 AM","Answered":"0","handled":"1"},
{"DateTime":"5/7/18 12:00:00 AM","Answered":"0","handled":"2"},
{"DateTime":"5/3/18 12:00:00 AM","Answered":"0","handled":"0"},
{"DateTime":"5/18/18 06:00:00 AM","Answered":"0","handled":"14"},
{"DateTime":"5/12/18 12:30:00 AM","Answered":"0","handled":"1"}]
for (row in test) {
var dt = test[row].DateTime;
dt = new Date(dt)
var weekDay = parseInt(dt.getDay());
let hh = dt.getHours();
if(hh < 10) {
hh = '0' + hh
}
let mm = dt.getMinutes();
if(mm == 0) {
mm = '0' + mm;
}
var timeInterval = hh + ':' + mm;
var answered = parseInt(test[row].CallsAnswered);
var handled = parseInt(test[row].handled);
以下逻辑失败了。我试过打印“idx”和“int” 这是每个对象数组的索引,我得到了 正确的结果。试图映射正确的工作日(hhObj [idx])和 interval(hhObj [idx] .data [int])不起作用。
for(i = 0; i < 5; i++) {
for(int in hhObj[i].data) {
if(weekDay == hhObj[i].day && hhObj[i].data[int].interval == timeInterval) {
var idx = parseInt(hhObj[i].day) - 1;
hhObj[idx].data[int].handled += parseInt(test[row].handled);
}
}
}
}
预期结构:
hhObj = [{
day: 1,
data: [{
interval: "00:00",
handled: 10
},
{
interval: "00:30",
handled: 5
}....]
},
{
day: 2,
data: [{
interval: "00:00",
handled: 2
},
{
interval: "00:30",
handled: 0
}....]
}....]
当前结果(Handled得到总和,但在所有工作日内以相同的间隔复制):
hhObj = [{
day: 1,
data: [{
interval: "00:00",
handled: 12
},
{
interval: "00:30",
handled: 5
}....]
},
{
day: 2,
data: [{
interval: "00:00",
handled: 12
},
{
interval: "00:30",
handled: 5
}....]
}....]