我有两个数组:
1)预定工作日期轮班时间表(每个预定日期可以有多个条目,因为某些人一天之内有多个班次)
2)每个班次的工作时间
例如,
1)['07 / 19/2019','07 / 19/2019','07 / 20/2019','07 / 21/2019']
2)['6','2','8','8']
目标是循环浏览每个日期,并显示每个日期的总工作时间以及各个“班次”。
例如,最终结果应显示:
07/19/2019:8
6,2
07/20/2019:8
8
07/21/2019:8
8
现在,我的代码使用一个数字将每个Date关联在一起,从而在两个数组中循环,因此得到以下输出:
07/19/2019:6
07/19/2019:2
07/20/2019:8
07/20/2019:8
我是JavaScript新手。也许我需要使用“地图”,“减少”或“过滤器”创建某种关联?
我不太确定从哪里开始。
for (let x = 0; x < shifts.length; x++) {
shift_date.push(shifts.date);
shift_hours.push(shifts.hour);
}
for (let y = 0; x < shifts_date.length) {
htmlOutput += "Date: " + shift_date[y];
htmlOutput += "Hours Worked: " + shift_hours[y];
}
答案 0 :(得分:1)
您可以为此使用.reduce()
:
const dates = ["07/19/2019", "07/19/2019", "07/20/2019", "07/21/2019"];
const hours = ["6", "2", "8", "8"];
const result = dates.reduce((all, curr, ndx) => {
all[curr] = (all[curr] | 0) + +hours[ndx];
return all;
}, {});
console.log(result);
答案 1 :(得分:1)
您可以做的是将数组成对存储,并将其放入循环中。我的意思是: 现在,您已完成以下设置:
let shift_dates = ['07/19/2019', '07/19/2019', '07/20/2019', '07/21/2019']
let shift_hours = ['6', '2', '8', '8']
我们可以这样设置:
let shifts = [{'date':'07/19/2019', 'hours':'6'},
{'date':'07/19/2019', 'hours':'2'},
{'date':'07/20/2019', 'hours':'8'},
{'date':'07/21/2019', 'hours':'8'}]
请注意,第一个实现是两个单独的索引数组,而第二个实现是对象数组,其中包含有关移位的信息。作为方便的副作用,此数组结构模仿了数据库如何返回电子表格行。
之后,您可以像以前一样简单地遍历数据:
for(var i = 0; i < shifts.length; i++) {
let shift = shifts[i]; //This object contains your info
htmlOutput += "Date: " + shift.date;
htmlOutput += "Hours Worked:" + shift.hours;
}
请注意,使用此实现,您可以添加更多字段,例如员工姓名或轮班领导。
let shifts = [{'date':'07/19/2019', 'hours':'6', 'supervisor':'tommy'},
{'date':'07/21/2019', 'hours':'8', 'supervisor':'fred'}]; //Row 1
let x = shifts[1].supervisor; //'fred'
最后,如何遍历这些数据实际上取决于您如何获取它。
TLDR 使用对象数组将数据分组在一起,就像在电子表格的行中一样。
答案 2 :(得分:0)
给出您要创建的数组稍微复杂一点的对象的注释。
在这里,我创建了一个对象来命名事物,然后用值填充它。
最后,您只需使用 {
$check=$this->input->post('check');
if($check=="on")
{
$checkval="IN";
Store value here inline column
}
else{
$checkval="OUT";
Store value here offline column
}
}
对象即可获取所需的任何信息。
例如mywork
输出:
07/19/2019 8
或者您可以像我在这里显示的那样遍历它们。
最后,我添加了一些jQuery代码以在页面中显示此内容,如果需要,可以忽略该部分,仅用于显示如何使用对象。
console.log(mywork.workgroups[0].date,mywork.workgroups[0].totalhours);
var mywork = mywork || {
workdates: ['07/19/2019', '07/19/2019', '07/20/2019', '07/21/2019', '07/22/2019','07/22/2019'],
workduration: ['6', '2', '8', '8','7','6'],
workgroups: [],
uniquedates: [],
showWork: function() {
$.each(this.workgroups, function(index, value) {
//console.log("dates:", this.workdates);
let item = $('.item').first().hide().clone();
item.find('.item-date').html(value.date);
item.find('.item-total').html(value.totalhours);
item.find('.item-hours').html("("+value.hours.join(',')+")");
$('.container').append(item.show());
})
}
};
function setThingsUp(w) {
w.uniquedates = w.workdates
.filter(function(element, index, thisarray) {
return thisarray.indexOf(element) === index;
}, w);
w.uniquedates.forEach(function(udate, uindex, ar) {
// console.log("ud:", udate);
let wg = {
"date": udate,
"totalhours": 0,
"hours": []
};
w.workdates
.forEach(function(element, index, thisarray) {
if (udate === element) {
let h = w.workduration[index] * 1;
wg.hours.push(h);
wg.totalhours = wg.totalhours + h;
}
}, w);
w.workgroups.push(wg)
}, w);
// console.log("u:", w.uniquedates);
// console.log("wg:", w.workgroups);
}
setThingsUp(mywork);
//console.log("work:", mywork.workdates);
// console.log(mywork.workgroups[0].date, mywork.workgroups[0].totalhours);
// show the data for each date
mywork.workgroups.forEach(function(wg, index, thisarray) {
// console.log(wg.date, wg.totalhours, wg.hours);
});
$(function() {
mywork.showWork();
});