Javascript 使用数字和字符串优化数组的搜索结果
我希望改进我目前正在制作的应用程序的搜索功能 我目前正在从firebase查询中获取一个对象数组,如下所示Javascript 使用数字和字符串优化数组的搜索结果,javascript,react-native,Javascript,React Native,我希望改进我目前正在制作的应用程序的搜索功能 我目前正在从firebase查询中获取一个对象数组,如下所示 { make: "make", model: "model", year: 2002, gas: "petrol", mileage: "mileage", images: { image1: "url", image2: "url" }, price: 1295 } refine = (refinements,
{
make: "make",
model: "model",
year: 2002,
gas: "petrol",
mileage: "mileage",
images: {
image1: "url",
image2: "url"
},
price: 1295
}
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;
}
我目前使用filter方法对数组进行过滤,并将包含优化的对象与原始数组进行比较,如下所示
{
make: "make",
model: "model",
year: 2002,
gas: "petrol",
mileage: "mileage",
images: {
image1: "url",
image2: "url"
},
price: 1295
}
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;
}
这对于比较包含字符串的字段非常有用,但是如果用户想要检查最低年龄或最高价格,我不知道如何实现
有什么建议吗?一种方法是使用一个字段来描述要执行的比较类型:“最小”、“最大”或“相等”: 以及您的过滤器:
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;
}
refine=(优化,当前结果)=>{
返回currentResults.filter(结果=>this.matchesAll(优化,结果));
}
matchesAll=(优化、结果)=>{
用于(const key in definitions){
如果(优化[键]['type']=='min'){
if(优化[关键]>结果[关键]){
返回false;
}
}else if(优化[键]['type']='max'){
if(优化[关键点]<结果[关键点]){
返回false;
}
}否则{
如果(优化[关键点]!==结果[关键点]){
返回false;
}
}
}
返回true;
}
Hi@dev8080,感谢您的回复,我曾考虑过用类似的方法来做,但结构与您的不同,这导致了不准确的结果。这看起来很完美。感谢您抽出时间回复@没问题。随时