我试图总结每个成员的缺勤天数。
我们只有两个成员:A和B。A出于不同的原因离开了两次,她放假3天,其他原因放假2天。B已住院8天,假期4天。
所以,这是我尽力而为的代码。
*例如,我写的日期。日期值将由JS onclick发布。 不需要toString或其他。
var member = [{
name : "A",
absent : [{
reason : "Leave",
start_date : "2020-02-01",
end_date : "2020-02-03"
},{
reason : "etc",
start_date : "2020-02-15",
end_date : "2020-02-16"
}
]
},{
name : "B",
absent : [{
reason : "Hospitalized",
start_date : "2020-02-03",
end_date : "2020-02-10"
},{
reason : "Leave",
start_date : "2020-02-10",
end_date : "2020-02-13"
}
]
}]
var countAbsentDays = function(){
var countDays_start = member[0].absent[0].start_date;
var countDays_end = member[0].absent[0].end_date;
var diff = (new Date(countDays_end)) - (new Date(countDays_start));
var count = diff/(1000 * 60 * 60 * 24);
return count;
};
console.log(countabsentDays());
要收集每个成员的缺勤天数,我需要使用for循环开发以下代码。
var countDays_start = member[0].absent[0].start_date;
猜想,我输入0的索引号可以用变量替换。但是我无法想象这个函数如何在absent
数组及其元素absent.start_date
和absent.end_date
上全部运行。
有人帮忙吗?
您可以使用map转换数组,并减少以将数组元素累加为一个值。
var member = [{
name : "A",
absent : [{
reason : "Leave",
start_date : "2020-02-01",
end_date : "2020-02-03"
},{
reason : "etc",
start_date : "2020-02-15",
end_date : "2020-02-16"
}
]
},{
name : "B",
absent : [{
reason : "Hospitalized",
start_date : "2020-02-03",
end_date : "2020-02-10"
},{
reason : "Leave",
start_date : "2020-02-10",
end_date : "2020-02-13"
}
]
}]
var countAbsentDays = function(){
return member.map( m => // map every element of member array to object { [m.name]: (reduced value of absent array) }
({
[m.name]:
m.absent.reduce(
(acc, x) =>
acc + dateDiff(x.end_date, x.start_date)
, 0 ) // accumulator + dateDiff result returned for every element
})
);
function dateDiff(end, start) {
var countDays_start = start;
var countDays_end = end;
var diff = (new Date(countDays_end)) - (new Date(countDays_start));
var count = diff/(1000 * 60 * 60 * 24);
return count;
}
};
console.log(countAbsentDays());