我正在我的angular 7应用程序中从服务器请求以下数组。
var data = [{
"ProjectID": "09fbeda6-860e-11e9-a8cd-38607725a846",
"StartDate": "2018-12-11T18:30:00.000Z",
"EndDate": "2019-01-11T18:30:00.000Z",
"Name": "Test filters"
},
{
"ProjectID": "01418e66-85f3-11e9-a8cd-38607725a846",
"StartDate": "2019-06-02T18:30:00.000Z",
"EndDate": "2019-06-27T18:30:00.000Z",
"Name": "Sang"
},
{
"ProjectID": "ad38f7ce-85e7-11e9-a8cd-38607725a846",
"StartDate": "2019-06-02T18:30:00.000Z",
"EndDate": "2019-11-28T18:30:00.000Z",
"Name": "Arun_Viewer_test"
}];
并且我具有以下功能,它将接受动态键和值以过滤数据。
filterBy = { Name: ["Filters"]}; // to search based on dynamic key and value
result = data.filter(function (o) {
return Object.keys(filterBy).every(function (k) {
return filterBy[k].some(function (f) {
return (o[k].toLowerCase()).includes(f.toLowerCase());
});
});
});
console.log(result);
ES6的替代方法,可提供与上述功能相同的输出
result = data.filter(o => Object.keys(filterBy).every(k => filterBy[k].some(f => (o[k].toLowerCase()).includes(f.toLowerCase()))));
控制台中的结果是打印,并且功能正常。
但是我想过滤项目是否在给定的startdate和enddate之间,它应该包含项目名称。 简而言之,我必须应用两个过滤器,项目应包含给定名称,项目应在给定的开始日期和结束日期之间
filterBy = { Name: ["Filters"], StartDate: ["new Date(12/31/2018)"], EndDate: ["new Date(31/07/2019)"]}
答案 0 :(得分:-1)
这不是最理想的选择,但在您的情况下为this should work。
const filterCriteria = [{{key:'Name',value:'blah'}},{key:'StartDate',value:'blah1'},{key:'EndDate',value:'blah2'}];
const filteredValues = records.filter(record => {
let filtered = true;
filterCriteria.forEach(criteria => {
if (filtered && record[criteria.key] !== criteria.value) {
filtered = false;
}
})
return filtered;
});
可以使用更高阶的函数来改进此解决方案。