我正在创建一个网站,该网站将显示一个区域内的所有公共厕所(它适用于学校项目)。我导入了一个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;
};
}
答案 0 :(得分:0)
不是循环遍历this
的每个属性,而是创建要匹配的属性,而不是用户filter
和some
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" == 0
为true
因为我认为搜索字词始终是字符串,而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}}可能是数字。您可能还想创建一个(更好的)函数来检查值的相等性(可能是字符串小写,转换为数字,......)。