Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Arrays_Function_Object_This - Fatal编程技术网

Javascript 在数组中搜索没有结果

Javascript 在数组中搜索没有结果,javascript,arrays,function,object,this,Javascript,Arrays,Function,Object,This,我正在创建一个网站,展示一个地区所有公共厕所(这是一个学校项目)。我正在导入一个JSON文件,对其进行解析并将其命名为“toiletData”。我想做的是让一个对象负责定义用户搜索的标准。当用户按下“搜索”键时,对象被创建并选择了标准,而我正试图循环浏览如厕数据以删除任何不合适的条目。问题是函数没有返回正确的数组,当搜索特定条件时,函数只返回部分匹配项,即使有更多匹配项 搜索对象的代码(翻译成英文): 在JSON文件中,与变量关联的值为: name = string, address = st

我正在创建一个网站,展示一个地区所有公共厕所(这是一个学校项目)。我正在导入一个JSON文件,对其进行解析并将其命名为“toiletData”。我想做的是让一个对象负责定义用户搜索的标准。当用户按下“搜索”键时,对象被创建并选择了标准,而我正试图循环浏览如厕数据以删除任何不合适的条目。问题是函数没有返回正确的数组,当搜索特定条件时,函数只返回部分匹配项,即使有更多匹配项

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

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

name = string, 
address = string, 
wheelchairAccesible = 1(yes) or 0(no),
price = int

不要循环遍历
的每个属性,而是创建要匹配的属性,并使用
筛选
一些

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

由于
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
    );
};
注意:


中的
===
更改为
=
此[key]==马桶[key]
中的
“0”==0
,因为我认为搜索词总是字符串,
马桶数据中的数据。条目可以是数字。您可能还想创建一个(更好的)函数来检查值的相等性(可能是字符串小写、转换为数字等)。

toiletData。entries
一个对象数组或仅仅是一个对象什么的?toiletData.entries是一个对象数组。将其打印到控制台会返回:[{…},{…},(更多){…}]我用所需的JS代码创建了一个小型github存储库,最好在问题中包含数据和预期结果。是否希望搜索使用
?您希望搜索包含与每个搜索条件属性匹配的厕所,还是至少包含一个属性?已解决问题!
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
    );
};