筛选数组以获得值之间的特定结果



我有一个包含来自数据库的24个结果的数组,其中包括年和月。目标是:我知道所选的月份和年份,所以我得到了当前年份和前一年的结果,结果是数组24。

现在我想获得当前月和前11个月的结果。

我还没有意识到我怎么能做到这一点,我在这里执行了一些测试,这是我目前拥有的,但不正确:

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)

预期结果应该是在应用过滤器获得选定月份的前11个月之后:

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' },
]

您可以创建一个函数来获取日期之间的月差,然后进行筛选以确保该值大于等于0且小于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);

不是使用filter找到你需要的对象的索引,而是使用slice在它之前取出对象来创建一个新的数组

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);

您可以使用let而不是const和以下过滤器:

let Year = '2020';
let Month = '11';
let finalfilter = data.filter(
location => location.year == Year && location.month <= Month || location.year == Year-1 && location.month > Month
);

最新更新