我有对象数组:
let response = [{"id": 1, "name": "Alise", "price": 400, "category": 4}];
我还有一些用于过滤的数组:
let names = ["Jessy", "Megan"];
let prices = [300, 500];
let category = [1,2,4];
我需要通过这些数组过滤数组,条件 AND 之间names, prices, category以及OR每个数组中的元素之间的条件:JessyOR Megan.etc
我做了这个解决方案:
const filterByCategory = (response: IResponse[], filterBy: any[]) => response.filter((e: IResponse) => filterBy.indexOf(e.category) > -1);
const filterByPrice = (response: IResponse[], filterBy: any[]) => response.filter((e: IResponse) => e.price in filterBy);
然后我不知道如何更好地拨打电话:
单程:
filter() {
let filtered = filterByCategory(response, category);
filtered = filterByPrice(filtered, prices);
}
第二:
filter() {
let filtered = [];
if (category && category.length) {
filtered = filterByCategory(response, category);
}
if (prices && prices.length) {
filtered = filterByCategory(filtered, category);
}
}
第三:
let filtered = response.filter((element) => {
return category && category.indexOf(e.category) > -1 &&
prices && prices.indexOf(e.price) > -1 && etc.
});
首先是简单的修改过滤逻辑,不改变主过滤器
第二个和第一个一样,尽管有额外的检查
第三是最短的方式,但将来很难修改
侃侃尔雅
LEATH
千巷猫影
萧十郎
相关分类