I'm trying to filter out objects based on values in two arrays, but it keeps returning incorrect ones/too many.
Scenario:
I have an array of evidences and an array of assessments, which have to be filtered out by their dates. F.e. only evidences that are between assessment's startDate and endDate have to be returned in a new array. In my example below I keep returning all evidences, even though I ask to compare uploadDate between startDate and endDate:
let evidences = [
{ id: 'ev1', name: 'evidence 1', uploadDate: new Date('2023-04-28') },
{ id: 'ev2', name: 'evidence 2', uploadDate: new Date('2023-05-02') },
];
let assessments = [
{ id: 'ca1', name: 'assessment 1', startDate: new Date('2023-04-25'), endDate: new Date('2023-05-01') },
{ id: 'ca2', name: 'assessment 2', startDate: new Date('2023-05-02'), endDate: new Date('2023-05-08') },
];
let evidencesPerAssessment = [];
for (var i = 0; i < assessments.length; i++) {
var startDate = assessments[i].startDate;
var endDate = assessments[i].endDate;
for (var j = 0; j < evidences.length; j++) {
var uploadDate = evidences[j].uploadDate;
if (uploadDate >= startDate && uploadDate <= endDate) {
evidencesPerAssessment.push(evidences[j]);
}
}
}
console.log(evidencesPerAssessment);
What I want to achieve, is that for each assessment only evidences that are between its startDate and endDate would be pushed to the array. In this case with test data only 'evidence 1' should be shown for 'assessment 1' as that evidence's uploadDate (2023-04-28) is between startDate and endDate (2023-04-25 - 2023-05-01).
Does anyone have an idea on how to achieve this?