javascript - 使用键空白值过滤对象的 JavaScript 数组

标签 javascript angularjs arrays

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

<input ng-model="search.state_prov">State</input>
<input ng-model="search.zip">Zip</input>
<input ng-model="search.country"></input>

我有很多对象,例如:

places = [{name: place1, state_prov: MO, zip: 63101, country: US},
   {name: place2, state_prov: CA, zip: 90210, country: US},
   {name: place3, state_prov: AB, zip: T0A, country: CA}
   {name: place4, state_prov: CA, zip: 90001, country: US}
]

我正在尝试根据表单中输入的内容过滤此数组(搜索)。初始化表单时,“搜索”对象为空。一旦用户开始在文本框中键入内容,比如 state_prov,搜索对象就会为 search.state_prov 获取一个新键,其值为框中键入的任何值。

然后我可以在 places 数组中搜索匹配项,我已经能够使用这个 array.filter() 原型(prototype)来做到这一点:

var result = places.filter(searchQuery, query);

function searchQuery(place){
   return Object.keys(this).every((key) => place[key] === this[key]);
}

我的问题是,如果用户填写了两个文本框,然后清除了其中一个,希望仅通过仍然包含数据的文本框进行搜索,“搜索”对象仍然会有一个用于删除输入的键一个空字符串的值。

 search = {state_prov: "CA", zip: ""}

过滤器将尝试将数组中的对象与空字符串匹配,而我宁愿完全忽略该键并仅搜索具有与之关联的值的键。我怎样才能到达这最后一步?

最佳答案

您可以检查该键的值是否不为空:

function searchQuery(place){
   return Object.keys(this).every((key) => place[key] === this[key] && this[key]);
}

因为 ""0nullundefined 的计算结果为 false。

关于javascript - 使用键空白值过滤对象的 JavaScript 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45990694/

相关文章:

JavaScript 字体大小 cookie

javascript - 将鼠标悬停在文本上时,文本会下降然后返回

javascript - 我可以在 EJS 中渲染多个源吗

javascript - 如何使用 angularJS 执行类似 jQuery 的 $ ("#formID").submit() 事件?

c - 字符串数组的数组

javascript - 基于左右控制和摩擦力的jQuery圆形动画

javascript - ng-file-upload 验证(ngf-[max|min]-[height|width] 或 ngf-dimensions)似乎未生效

javascript - Angular http 从 ng-click 获取

c - 如何从二维数组中获取元素并将它们用作c中的函数参数?

javascript - 如何从 JSON 数据获取要填充的表行?