1x2x3x4x
1x2x3x4x

Reputation: 604

Filter JSON by range dates JS

I want to filter a simple JSON file by date range. With a start date and and end date.

And this is my function:

var startDate = new Date("2013-3-25");
var endDate = new Date("2017-3-25");
var aDate = new Date();

var filteredData = this.orders.filter(function(a){
aDate = new Date(a.fecha);
    aDate >= startDate && aDate <= endDate;
});
console.log(filteredData)

Here's my: fiddle

I'm expecting to get one object in my array, however the array is empty as you can see in the console.

Upvotes: 1

Views: 4660

Answers (3)

dkrichards86
dkrichards86

Reputation: 19

You aren't returning anything in your filter.

var filteredData = this.orders.filter(function(a){
    aDate = new Date(a.fecha);
    return aDate >= startDate && aDate <= endDate;
});

For reference, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

Upvotes: 0

gurvinder372
gurvinder372

Reputation: 68373

however the array is empty as you can ses in the console.

Because filter's callback method is not returning anything, make it

var filteredData = this.orders.filter(function(a){
    var aDate = new Date(a.fecha);
    return aDate.getTime() >= startDate.getTime() && aDate.getTime() <= endDate.getTime();
});

Note

  • Date comparison is done differently, check this answer.
  • You need not do getTime() on startDate and endDate for every iteration, do it once before the filter

Upvotes: 3

JakeParis
JakeParis

Reputation: 11210

When you use the filter method on an array, that function needs to return a boolean to indicate to the script whether to keep a value or remove it.

You didn't return the value from within the filter function. This works:

var filteredData = this.orders.filter(function(a){
    aDate = new Date(a.fecha);
    return aDate >= startDate && aDate <= endDate;
});

Upvotes: 4

Related Questions