Reputation: 604
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
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
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
getTime()
on startDate
and endDate
for every iteration, do it once before the filter
Upvotes: 3
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