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

时间:2018-06-02 19:52:41

标签: javascript react-native

我希望改进我目前的搜索功能,以便制作我正在制作的应用。

我目前正在从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;
}

这适用于比较包含字符串的字段,但是如果用户想要检查最小年龄或最高价格,我不知道如何实现它。

有什么建议吗?

1 个答案:

答案 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;
    }