Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用数字和字符串优化数组的搜索结果_Javascript_React Native - Fatal编程技术网

Javascript 使用数字和字符串优化数组的搜索结果

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,

我希望改进我目前正在制作的应用程序的搜索功能

我目前正在从firebase查询中获取一个对象数组,如下所示

{
   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,感谢您的回复,我曾考虑过用类似的方法来做,但结构与您的不同,这导致了不准确的结果。这看起来很完美。感谢您抽出时间回复@没问题。随时