筛选值为Key Blank的对象的JavaScript数组

筛选值为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> 我正在尝试根据表单中输入的输入筛选此数组(搜索)。初始化表单时,“搜索”对象为空

我有一个HTML表单,其中不同的输入文本框绑定到AngularJS搜索对象,即

<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]);
}