筛选值为Key Blank的对象的JavaScript数组
我有一个HTML表单,其中不同的输入文本框绑定到AngularJS搜索对象,即筛选值为Key Blank的对象的JavaScript数组,javascript,angularjs,arrays,Javascript,Angularjs,Arrays,我有一个HTML表单,其中不同的输入文本框绑定到AngularJS搜索对象,即 <input ng-model="search.state_prov">State</input> <input ng-model="search.zip">Zip</input> <input ng-model="search.country"></input> 我正在尝试根据表单中输入的输入筛选此数组(搜索)。初始化表单时,“搜索”对象为空
<input ng-model="search.state_prov">State</input>
<input ng-model="search.zip">Zip</input>
<input ng-model="search.country"></input>
我正在尝试根据表单中输入的输入筛选此数组(搜索)。初始化表单时,“搜索”对象为空。一旦用户开始在文本框中键入,例如state_prov,搜索对象将获取一个新的search.state_prov键,该键的值为框中键入的任何值
然后,我可以在places数组中搜索匹配项,我已经能够使用此数组进行搜索。filter()原型:
var result = places.filter(searchQuery, query);
function searchQuery(place){
return Object.keys(this).every((key) => place[key] === this[key]);
}
我的问题是,如果用户填写两个文本框,然后清除其中一个,希望仅通过仍然包含数据的文本框进行搜索,“搜索”对象仍将具有一个值为空字符串的已擦除输入键
search = {state_prov: "CA", zip: ""}
当我希望完全忽略此键并只搜索具有与其关联的值的键时,筛选器将尝试使用空字符串匹配数组中的对象。我如何才能进入最后一步?那么
(place[key]===此[键]);(此[键]==='')
?或者,如果不需要检查字符串是否严格相等,请使用String(place[key])。includes(this[key])
您可以检查该键处的值是否为空:
function searchQuery(place){
return Object.keys(this).every((key) => place[key] === this[key] && this[key]);
}
因为
“
,0
,null
,和未定义的
计算为false。如果此[键]
是未定义的
或null
,这将导致错误,请小心。这对我不起作用。这可能就是我对问题的措辞。由于它正在查看'place[key]==this[key',当place[key]=='
时,我仍然希望它在this[key]===ABC'
时返回值。当位置[key]
为空字符串时,我想完全忽略它。这对我很有用!我也非常感谢关于比较相似字符串和非显式相等的额外建议。我喜欢我的结果。
function searchQuery(place){
return Object.keys(this).every((key) => place[key] === this[key] && this[key]);
}