function filterData(dataTable, crimeType, startDate, endDate) {
let lat, lng, block, type, info, date, results = [];
const dataFilter = arrow.predicate.custom(i => {
const date = toDate(dataTable.getColumn('Date').get(i));
const primaryType = dataTable.getColumn('PrimaryType').get(i);
return date >= startDate && date <= endDate &&
(crimeType === '' || primaryType === crimeType);
}, b => 1);
dataTable.filter(dataFilter)
.scan((index) => {
results.push({
'lat': lat(index),
'lng': lng(index),
index,
});
}, (batch) => {
lat = arrow.predicate.col('Latitude').bind(batch);
lng = arrow.predicate.col('Longitude').bind(batch);
block = arrow.predicate.col('Block').bind(batch);
type = arrow.predicate.col('PrimaryType').bind(batch);
info = arrow.predicate.col('Description').bind(batch);
date = arrow.predicate.col('Date').bind(batch);
}
);
return results;
}