根据多选下拉列表筛选对象列表 Javascript/Typescript/Lodash/Angular
filtering list of objects based on multi-selection dropdowns Javascript/Typescript/Lodash/Angular
我遇到了一些复杂的问题,需要您的帮助。
我有多个下拉过滤器,例如位置、类别、子类别 e.t.c。我的初始版本适用于无论选择哪种组合,它都会 return 正确的结果。我的下一个挑战是使用 multi select 制作下拉菜单。我正在为此使用 firebase,试图在客户端进行复杂的过滤。
我有从数据库中得到的这样的对象列表:
{
data1: {
status: true,
location: "New York",
category: "Food",
subcategory: "Pizza",
price: 24
}
data2: {
status: true,
location: "Chicago",
category: "Food",
subcategory: "Hot Dogs",
price: 5
}
data3: {
status: true,
location: "Miami",
category: "Food",
subcategory: "Taco",
price: 2
}
}
为了按多个值进行过滤,我有以下内容:
filter() {
this.filteredData = _.filter(this.getListings, _.conforms(this.activeFilters)).filter(x =>
x.status === true);
}
然后,我有一种方法可以根据条件设置活动过滤器,或者通过删除活动过滤器来显示 属性 中的所有内容,例如:
filterLocation() {
const location = this.filtersData.get('location').value;
this.locations = [];
for(let i = 0; i < location.length; i++) {
if (location[i].itemName === 'All') {
this.removeFilter('location');
}
if (location[i].itemName !== 'All') {
this.locations.push(location[i].itemName);
property = 'location';
this.activeFilters[property] = val => this.locations.some(x =>
val.includes(x));
this.filter();
}
}
}
然后,我对类别、子类别有相同或相似的方法e.t.c。
我现在想要实现的事情是,例如,如果需要,我想要多个 select 位置和类别或子类别,但不限于在将来添加更多属性。
因此,如果我选择纽约和迈阿密,我想获取包含这些值的所有项目,但如果我想按食品、饮料等其他值进行过滤,则不受限制 e.t.c.
此示例非常适合按单个值进行过滤,您可以根据需要添加任意数量的过滤器和组合,它始终 return 一个与您 select 从中匹配的对象数组下拉菜单。
我正在尝试一些东西,如果我设法解决了问题,我会更新问题,同时感谢所有帮助。谢谢
我想通了!我根据我的解决方案更新了 filterLocation() 方法。我现在打算改进过滤器。
我遇到了一些复杂的问题,需要您的帮助。
我有多个下拉过滤器,例如位置、类别、子类别 e.t.c。我的初始版本适用于无论选择哪种组合,它都会 return 正确的结果。我的下一个挑战是使用 multi select 制作下拉菜单。我正在为此使用 firebase,试图在客户端进行复杂的过滤。
我有从数据库中得到的这样的对象列表:
{
data1: {
status: true,
location: "New York",
category: "Food",
subcategory: "Pizza",
price: 24
}
data2: {
status: true,
location: "Chicago",
category: "Food",
subcategory: "Hot Dogs",
price: 5
}
data3: {
status: true,
location: "Miami",
category: "Food",
subcategory: "Taco",
price: 2
}
}
为了按多个值进行过滤,我有以下内容:
filter() {
this.filteredData = _.filter(this.getListings, _.conforms(this.activeFilters)).filter(x =>
x.status === true);
}
然后,我有一种方法可以根据条件设置活动过滤器,或者通过删除活动过滤器来显示 属性 中的所有内容,例如:
filterLocation() {
const location = this.filtersData.get('location').value;
this.locations = [];
for(let i = 0; i < location.length; i++) {
if (location[i].itemName === 'All') {
this.removeFilter('location');
}
if (location[i].itemName !== 'All') {
this.locations.push(location[i].itemName);
property = 'location';
this.activeFilters[property] = val => this.locations.some(x =>
val.includes(x));
this.filter();
}
}
}
然后,我对类别、子类别有相同或相似的方法e.t.c。
我现在想要实现的事情是,例如,如果需要,我想要多个 select 位置和类别或子类别,但不限于在将来添加更多属性。
因此,如果我选择纽约和迈阿密,我想获取包含这些值的所有项目,但如果我想按食品、饮料等其他值进行过滤,则不受限制 e.t.c.
此示例非常适合按单个值进行过滤,您可以根据需要添加任意数量的过滤器和组合,它始终 return 一个与您 select 从中匹配的对象数组下拉菜单。
我正在尝试一些东西,如果我设法解决了问题,我会更新问题,同时感谢所有帮助。谢谢
我想通了!我根据我的解决方案更新了 filterLocation() 方法。我现在打算改进过滤器。