作为后续行动
this question
,我成功地对我的observable应用了多个过滤器,这取决于用户决定应用哪个过滤器。
我的“问题”是,不确定是否应用了某个过滤器,甚至所有过滤器的工作方式都不同;有些是数字,有些是字符串。
我的观察结果如下:
getProperties(): Observable<Property[]> {
return this.http.get<Property[]>(this.url);
}
并应用动态过滤器,如下所示:
filterAndSort() {
let count = 0;
return this.getProperties()
//Only return properties where price is higher than or equal to min price
.map(properties => properties.filter((property) => {
if(property.price >= this.userSettings.getAppSetting("filterMinPrice", "number")) {
return property;
}
})
.filter((property) => {
//Return all properties if max price is not set (0)
if(this.userSettings.getAppSetting("filterMaxPrice", "number") == 0) {
return property;
}
//Only return properties where price is lower than or equal to max price
else if(property.price <= this.userSettings.getAppSetting("filterMaxPrice", "number")) {
return property;
}
})
.filter((property) => {
if(property.incomeCategory == this.userSettings.getAppSetting("filterIncomeClass", "string")) {
return property;
} else if (this.userSettings.getAppSetting("filterIncomeClass", "string") == "none") {
return property;
}
})
.filter((property) => {
if(property.numberOfRooms >= this.userSettings.getAppSetting("filterMinRooms", "number")) {
return property;
}
})
.filter((property) => {
if(property.numberOfBedrooms >= this.userSettings.getAppSetting("filterMinBedrooms", "number")) {
return property;
}
})
.sort((a: Property, b: Property) => {
//..
}
))
}
这是可行的,但我认为这不是我所说的最好的解决方案
filter()
一次又一次我认为如果我设法减少过量的if条件并仅使用
return property;
一旦在这种条件下,我的代码将更加整洁。(请记住,我将来会添加更多的过滤器选项,因此如果我必须以类似的方式应用它们,这肯定会变得更加混乱:p)
有什么建议吗?
(只是想澄清一下:我在这里使用NativeScript/Angular/Typescript)。