javascript - Verileri en son tarihe göre nasıl filtreler/azaltırsınız
data = {
start: 1,
data: [
{
name: 'Juan',
date: '2020-01-19
},
{
name: 'Carlo',
date: '2020-03-01
},
{
name: 'Dela',
date: '2020-03-01
},
{
name: 'Cruz',
date: '2021-04-01
}
],
totalRecords: 19
}
Yapmaya çalıştığım şey, verileri en son tarihe yani 2020-04-01 tarihine göre filtrelemek.
Denediğim şey şunun gibi:
response['data']['data'] = response['data']['data'].filter(item => {
return item['date'] > '2020-04-01';
});
Ama işe yaramıyor.
Beklenen çıktı böyle olmalıdır
data = {
start: 1,
data: [
{
name: 'Cruz',
date: '2021-04-01
}
],
totalRecords: 19
}
Cevap #1
sort kullanabilir ve ardından en son tarihe sahip öğeyi almak için dizideki ilk girdiyi alabilirsiniz.
data.data.sort((a, b) => new Date(b.date) - new Date(a.date))[0];
Cevap #2
Bazı problemler için başka cevaplar mevcuttur (performans ve beklenen çıktı açısından).
time complexityen azO(nlogn)süreceği içinsortkullanmamalısınız.filterkullanmak birden fazlalastItemdöndürecektir
==> Böylece Array#reduce'ü (zaman karmaşıklığı sadece O(n)) şöyle kullanabilirsiniz.
const comparedDate = new Date('2020-04-01')
const response = {
start: 1,
data:[{name:'Juan',date:'2020-01-19'},{name:'Carlo',date:'2020-03-01'},{name:'Dela',date:'2020-03-01'},{name:'Cruz',date:'2021-04-01'}],
totalRecords:19};
const lastData = response.data.reduce((acc, curr) => {
if(new Date(curr.date) > comparedDate)
acc = curr;
return acc;
}, response.data[0]);
console.log(lastData);Birden fazla öğe <= 2020-04-01 ile sonuçlanmasını istiyorsanız, bunu şöyle yapabilirsiniz
const comparedDate = new Date('2020-04-01')
const response = {
start: 1,
data:[{name:'Juan',date:'2020-01-19'},{name:'Carlo',date:'2020-03-01'},{name:'Dela',date:'2020-03-01'},{name:'Cruz',date:'2021-04-01'}],
totalRecords:19};
response.data = response.data.reduce((acc, curr) => {
if(new Date(curr.date) >= comparedDate)
acc.push(curr);
return acc;
}, []);
console.log(response);