我正在寻求改进我正在制作的应用程序的当前搜索功能。
我目前正在从 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;
}
这对于比较包含字符串的字段非常有效,但是如果用户想要检查最低年龄或最高价格,我不知道如何实现它。
有什么建议吗?
最佳答案
一种方法是使用一个字段来描述您要执行的比较类型:“min”、“max”或“equal”:
//----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;
}
关于javascript - 用数字和字符串细化数组的搜索结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50660629/