Reputation: 352
I have an array with 24 results from the database, which includes the year and month. the goal is: I know the month and year that was selected, so I get the results for the current year and the previous year, which results in the array of 24.
now I want to get the results for the current month and the previous 11 months.
I still haven't realized how I can do this, I have some tests performed by me here, which is what I currently have but is not correct:
const data = [
{ Data: '01/01/2019 00:00:00', location: '2', month: '01', year: '2019' },
{ Data: '02/01/2019 00:00:00', location: '2', month: '02', year: '2019' },
{ Data: '03/01/2019 00:00:00', location: '2', month: '03', year: '2019' },
{ Data: '04/01/2019 00:00:00', location: '2', month: '04', year: '2019' },
{ Data: '05/01/2019 00:00:00', location: '2', month: '05', year: '2019' },
{ Data: '06/01/2019 00:00:00', location: '2', month: '06', year: '2019' },
{ Data: '07/01/2019 00:00:00', location: '2', month: '07', year: '2019' },
{ Data: '08/01/2019 00:00:00', location: '2', month: '08', year: '2019' },
{ Data: '09/01/2019 00:00:00', location: '2', month: '09', year: '2019' },
{ Data: '10/01/2019 00:00:00', location: '2', month: '10', year: '2019' },
{ Data: '11/01/2019 00:00:00', location: '2', month: '11', year: '2019' },
{ Data: '12/01/2019 00:00:00', location: '2', month: '12', year: '2019' },
{ Data: '01/01/2020 00:00:00', location: '2', month: '01', year: '2020' },
{ Data: '02/01/2020 00:00:00', location: '2', month: '02', year: '2020' },
{ Data: '03/01/2020 00:00:00', location: '2', month: '03', year: '2020' },
{ Data: '04/01/2020 00:00:00', location: '2', month: '04', year: '2020' },
{ Data: '05/01/2020 00:00:00', location: '2', month: '05', year: '2020' },
{ Data: '06/01/2020 00:00:00', location: '2', month: '06', year: '2020' },
{ Data: '07/01/2020 00:00:00', location: '2', month: '07', year: '2020' },
{ Data: '08/01/2020 00:00:00', location: '2', month: '08', year: '2020' },
{ Data: '09/01/2020 00:00:00', location: '2', month: '09', year: '2020' },
{ Data: '10/01/2020 00:00:00', location: '2', month: '10', year: '2020' },
{ Data: '11/01/2020 00:00:00', location: '2', month: '11', year: '2020' },
{ Data: '12/01/2020 00:00:00', location: '2', month: '12', year: '2020' }
]
const Year = '2020'
const Month = '11'
const finalfilter = data.filter(location => location.year === Year)
console.log(finalfilter)
Expected result shoud be after aplly the filter to get the previous 11 months of the selected month:
const result = [
{ Data: '12/01/2019 00:00:00', location: '2', month: '12', year: '2019' },
{ Data: '01/01/2020 00:00:00', location: '2', month: '01', year: '2020' },
{ Data: '02/01/2020 00:00:00', location: '2', month: '02', year: '2020' },
{ Data: '03/01/2020 00:00:00', location: '2', month: '03', year: '2020' },
{ Data: '04/01/2020 00:00:00', location: '2', month: '04', year: '2020' },
{ Data: '05/01/2020 00:00:00', location: '2', month: '05', year: '2020' },
{ Data: '06/01/2020 00:00:00', location: '2', month: '06', year: '2020' },
{ Data: '07/01/2020 00:00:00', location: '2', month: '07', year: '2020' },
{ Data: '08/01/2020 00:00:00', location: '2', month: '08', year: '2020' },
{ Data: '09/01/2020 00:00:00', location: '2', month: '09', year: '2020' },
{ Data: '10/01/2020 00:00:00', location: '2', month: '10', year: '2020' },
{ Data: '11/01/2020 00:00:00', location: '2', month: '11', year: '2020' },
]
Upvotes: 0
Views: 83
Reputation: 30675
You could create a function to get the different in months between the dates, then filter to ensure this is greater than or equal to 0 and below 12:
const data = [
{ Data: '01/01/2019 00:00:00', location: '2', month: '01', year: '2019' },
{ Data: '02/01/2019 00:00:00', location: '2', month: '02', year: '2019' },
{ Data: '03/01/2019 00:00:00', location: '2', month: '03', year: '2019' },
{ Data: '04/01/2019 00:00:00', location: '2', month: '04', year: '2019' },
{ Data: '05/01/2019 00:00:00', location: '2', month: '05', year: '2019' },
{ Data: '06/01/2019 00:00:00', location: '2', month: '06', year: '2019' },
{ Data: '07/01/2019 00:00:00', location: '2', month: '07', year: '2019' },
{ Data: '08/01/2019 00:00:00', location: '2', month: '08', year: '2019' },
{ Data: '09/01/2019 00:00:00', location: '2', month: '09', year: '2019' },
{ Data: '10/01/2019 00:00:00', location: '2', month: '10', year: '2019' },
{ Data: '11/01/2019 00:00:00', location: '2', month: '11', year: '2019' },
{ Data: '12/01/2019 00:00:00', location: '2', month: '12', year: '2019' },
{ Data: '01/01/2020 00:00:00', location: '2', month: '01', year: '2020' },
{ Data: '02/01/2020 00:00:00', location: '2', month: '02', year: '2020' },
{ Data: '03/01/2020 00:00:00', location: '2', month: '03', year: '2020' },
{ Data: '04/01/2020 00:00:00', location: '2', month: '04', year: '2020' },
{ Data: '05/01/2020 00:00:00', location: '2', month: '05', year: '2020' },
{ Data: '06/01/2020 00:00:00', location: '2', month: '06', year: '2020' },
{ Data: '07/01/2020 00:00:00', location: '2', month: '07', year: '2020' },
{ Data: '08/01/2020 00:00:00', location: '2', month: '08', year: '2020' },
{ Data: '09/01/2020 00:00:00', location: '2', month: '09', year: '2020' },
{ Data: '10/01/2020 00:00:00', location: '2', month: '10', year: '2020' },
{ Data: '11/01/2020 00:00:00', location: '2', month: '11', year: '2020' },
{ Data: '12/01/2020 00:00:00', location: '2', month: '12', year: '2020' }
]
const Year = 2020;
const Month = 11;
function getMonthDiff(year1, month1, year2, month2) {
return (year1 - year2) * 12 + month1 - month2;
}
const finalfilter = data.filter(location => {
return (getMonthDiff(Year, Month, location.year, location.month) >= 0) &&
(getMonthDiff(Year, Month, location.year, location.month) < 12);
});
console.log(finalfilter);
Upvotes: 2
Reputation: 63524
Instead of using filter
find the index of the object you need then slice
out the objects before it to create a new array.
const data=[{Data:"01/01/2019 00:00:00",location:"2",month:"01",year:"2019"},{Data:"02/01/2019 00:00:00",location:"2",month:"02",year:"2019"},{Data:"03/01/2019 00:00:00",location:"2",month:"03",year:"2019"},{Data:"04/01/2019 00:00:00",location:"2",month:"04",year:"2019"},{Data:"05/01/2019 00:00:00",location:"2",month:"05",year:"2019"},{Data:"06/01/2019 00:00:00",location:"2",month:"06",year:"2019"},{Data:"07/01/2019 00:00:00",location:"2",month:"07",year:"2019"},{Data:"08/01/2019 00:00:00",location:"2",month:"08",year:"2019"},{Data:"09/01/2019 00:00:00",location:"2",month:"09",year:"2019"},{Data:"10/01/2019 00:00:00",location:"2",month:"10",year:"2019"},{Data:"11/01/2019 00:00:00",location:"2",month:"11",year:"2019"},{Data:"12/01/2019 00:00:00",location:"2",month:"12",year:"2019"},{Data:"01/01/2020 00:00:00",location:"2",month:"01",year:"2020"},{Data:"02/01/2020 00:00:00",location:"2",month:"02",year:"2020"},{Data:"03/01/2020 00:00:00",location:"2",month:"03",year:"2020"},{Data:"04/01/2020 00:00:00",location:"2",month:"04",year:"2020"},{Data:"05/01/2020 00:00:00",location:"2",month:"05",year:"2020"},{Data:"06/01/2020 00:00:00",location:"2",month:"06",year:"2020"},{Data:"07/01/2020 00:00:00",location:"2",month:"07",year:"2020"},{Data:"08/01/2020 00:00:00",location:"2",month:"08",year:"2020"},{Data:"09/01/2020 00:00:00",location:"2",month:"09",year:"2020"},{Data:"10/01/2020 00:00:00",location:"2",month:"10",year:"2020"},{Data:"11/01/2020 00:00:00",location:"2",month:"11",year:"2020"},{Data:"12/01/2020 00:00:00",location:"2",month:"12",year:"2020"}];
const year = '2020';
const month = '11';
const index = data.findIndex(obj => obj.year === year && obj.month === month);
const newArr = data.slice(index - 11, index + 1);
console.log(newArr);
Upvotes: 1
Reputation: 2705
You could use let
instead of const
and this filter:
let Year = '2020';
let Month = '11';
let finalfilter = data.filter(
location => location.year == Year && location.month <= Month || location.year == Year-1 && location.month > Month
);
Upvotes: 1