在数组中搜索没有结果

时间:2018-04-25 11:56:33

标签: javascript arrays function object this

我正在创建一个网站,该网站将显示一个区域内的所有公共厕所(它适用于学校项目)。我导入了一个JSON文件,对其进行了解析并将其命名为" toiletData"。我想要做的是让一个对象负责定义用户搜索的标准。当用户按下"搜索",并且在选择了标准的情况下创建了对象,并且我试图遍历toiletData以删除任何不合适的条目。问题是函数没有返回正确的数组,当搜索特定条件时,函数只返回一些匹配,即使还有更多。

搜索对象代码(翻译成英文):

0000101000000

在JSON文件中,与变量关联的值为:

function SearchCriteria() {
    this.name = void 0;
    this.address = void 0;
    this.wheelchairAccesible = void 0;
    this.price = void 0;

    this.equals = function() {
        let matches = Object.values(toiletData.entries);

        Object.values(toiletData.entries).forEach(toilet => {
            Object.keys(this).forEach(key => {
                if ((this[key] !== undefined) && (typeof this[key] !== "function")) {
                    if (this[key] !== toilet[key]) {
                        matches.remove(toilet);
                    }
                }
            });
        });
        return matches;
    };
}

2 个答案:

答案 0 :(得分:0)

不是循环遍历this的每个属性,而是创建要匹配的属性,而不是用户filtersome

var matchProps = ["name", "address", "wheelchairAccesible", "price"];
Object.values(toiletData.entries)
   .filter( toilet => !matchProps
     .some( key => this[key] != toilet[key] ) );

答案 1 :(得分:0)

由于toiletData.entries已经是一个数组,因此您不需要使用Object.values,因为它是多余的。另外,为什么要从数组的副本中删除元素,只需使用为您返回结果数组的filter

this.equals = function() {
    let searchKeys = Object.keys(this).filter(key =>                       // get a list of available search keys first (for the sake of both clarity and performance)
        this[key] !== undefined && typeof this[key] !== "function"
    );

    return toiletData.entries.filter(toilet =>                             // then for each toilet data entry
        searchKeys.every(key => this[key] == toilet[key])                  // filter only those that match all the search keys values
    );
};

注意:

===更改为==中的this[key] == toilet[key],以便"0" == 0true因为我认为搜索字词始终是字符串,而toiletData.entries中的数据是initial_value = 1 answer_list = [] answer_list.append(initial_value) for i in range(1, 3): answer_list.append((1+1/i)*answer_list[i-1]) print(answer_list) 1}}可能是数字。您可能还想创建一个(更好的)函数来检查值的相等性(可能是字符串小写,转换为数字,......)。