我希望改进我目前的搜索功能,以便制作我正在制作的应用。
我目前正在从firebase查询中获取一个对象数组,如下所示
{
make: "make",
model: "model",
year: 2002,
gas: "petrol",
mileage: "mileage",
images: {
image1: "url",
image2: "url"
},
price: 1295
}
我目前使用filter方法过滤数组,并将包含细化的对象与原始数组进行比较,如下所示
refine = (refinements, currentResults) => {
return currentResults.filter(result => this.matchesAll(refinements, result));
}
matchesAll = (refinements, result) => {
for (const key in refinements) {
if (refinements[key] !== result[key]) {
return false;
}
}
return true;
}
这适用于比较包含字符串的字段,但是如果用户想要检查最小年龄或最高价格,我不知道如何实现它。
有什么建议吗?
答案 0 :(得分:2)
一种方法是使用字段来描述您想要执行的比较类型:" min"," max"或"等于":
//----refinements could be:
{
"price":
{ "type":"max",
"value":1000
},
"age":
{ "type":"min",
"value":18
},
"name":
{ "type":"eq",
"value":'dsjkds'
},
...
}
您的过滤器:
refine = (refinements, currentResults) => {
return currentResults.filter(result => this.matchesAll(refinements, result));
}
matchesAll = (refinements, result) => {
for (const key in refinements) {
if(refinements[key]['type'] === 'min'){
if (refinements[key] > result[key]) {
return false;
}
}else if(refinements[key]['type'] === 'max'){
if (refinements[key] < result[key]) {
return false;
}
}else{
if (refinements[key] !== result[key]) {
return false;
}
}
}
return true;
}