Object.defineProperties(Array.prototype, { count: { value: function (query) { /* Counts number of occurrences of query in array, an integer >= 0 Uses the javascript == notion of equality. */ var count = 0; for(let i = 0; i < this.length; i++) if(this[i] == query) count++; return count; } } }); rows = $(".table-div table .worker-row"); //console.log(trs) workers = {}; rows.each((n, tr) => { //console.log(tr); worker_td = $(tr).find("td:first"); worker = worker_td.attr("data-worker"); shift_tds = $(tr).find(".rota-day"); shifts = [] shift_tds.each((n, td) => { shifts.push($(td).attr("data-shift")); }) shifts_unique = new Set(shifts); shifts_unique.delete(""); //console.log(shifts_unique); weekends_worked = 0; weeks = shift_tds.length / 7; whole_weekends_worked = 0; for(var i = 1; i <= weeks; i++) { //console.log($(tr).find(`[data-week='${i}'][data-day='Sat']`)); if($(tr).find(`[data-week='${i}'][data-day='Sat']`).attr("data-shift") != "" || $(tr).find(`[data-week='${i}'][data-day='Sun']`).attr("data-shift") != "") { weekends_worked = weekends_worked + 1; } if($(tr).find(`[data-week='${i}'][data-day='Sat']`).attr("data-shift") != "" && $(tr).find(`[data-week='${i}'][data-day='Sun']`).attr("data-shift") != "") { whole_weekends_worked = whole_weekends_worked + 1; } } shift_counts = {}; total_shifts = 0; days_lost = 0; shifts_unique.forEach(el => { //console.log(el); shift_counts[el] = shifts.count(el); total_shifts = total_shifts + shifts.count(el); if(el == "night_weekday") { days_lost = days_lost + shifts.count(el) / 4 * 5 } if(el == "night_weekend") { days_lost = days_lost + shifts.count(el) / 3 * 4 whole_weekends_worked = whole_weekends_worked - shifts.count(el) / 3 } }); days_lost = days_lost + whole_weekends_worked console.log(worker, whole_weekends_worked); //days_lost = days_lost + whole_weekends_worked; //console.log(shift_counts); workers[worker] = { "site": worker_td.attr("data-site"), "nwds": worker_td.attr("data-nwds"), "fte": worker_td.attr("data-fte_adj"), "end_date": worker_td.attr("data-end_date"), "shifts": shifts, "shift_types": shifts_unique, "weekends_worked": weekends_worked, "shift_counts": shift_counts, "days_lost": days_lost, //"shifts" } sc = JSON.stringify(shift_counts); worker_td.after(`
Total shifts: ${total_shifts}, Weekends: ${weekends_worked}, Training days lost: ${days_lost}, ${sc}
`) }) $("th.worker").append($("").click(() => { $(".rota-day").toggle(); $(".worker-summary").toggle(); }))