我在ngrepeat上有一个自定义过滤器,只需要搜索特定字段中的单词。我得到了正确的工作,如下面的代码所示。问题是我还需要它不仅可以使用一个单词,还可以使用多个单词。因此,例如,如果我有一个带有word1和word2的数组,我需要在任何指定的字段中至少匹配两个字。
$scope.mySearch = function (item){
var searchTerm = "word1"; //Need to be able to search on ["word1","word2"]
var fields = ['firstName', 'lastName', 'email', 'phone', 'fax', 'category', 'subCat', 'company', 'street', 'zip', 'state', 'city', 'country'];
for(var i = 0, l = fields.length; i < l; i ++){
if(item[fields[i]] && item[fields[i]].toLowerCase().indexOf(searchTerm)!==-1){
return true;
}
} return false;
};
此代码使用一个单词,在此示例中&#34; word1&#34; ...如何使其适用于单词数组?我试图添加另一个for循环时迷路了。
答案 0 :(得分:1)
$scope.mySearch = function (item)
{
var searchTerms = ["word1","word2"];
var fields = ['firstName', 'lastName', 'email', 'phone', 'fax', 'category', 'subCat', 'company', 'street', 'zip', 'state', 'city', 'country'];
for(var i = 0, l = searchTerm.length; i < l; i++)
{
if(fields.indexOf(searchTerms[i]) > -1)
{
return true;
}
}
return false;
};
答案 1 :(得分:1)
以下实施适用于任意数量的searchTerms
和任意数量的fields
,并执行严格比较(===
)。您可以根据需要进行修改。
所以,这是一个想法:
“所有 searchTerms 匹配(即allMatch
为真)iff为每个 字 < em>在searchTerms
中有一些 字段 (在fields
中),以便指定item
的 < strong> field 属性的值等于 word 。“
$scope.mySearch = function (item) {
var searchTerms = ['word1' 'word2'];
var fields = ['firstName', 'lastName', 'email', 'phone', 'fax'.
'category', 'subCat', 'company', 'street', 'zip',
'state', 'city', 'country'];
var allMatch = searchTerms.every(function (word) {
return fields.some(function (field) {
return item[field] === word;
});
});
return allMatch;
};
<子>
它可以很容易地修改为使用for-loop
,但我选择使用数组的 every()
和 some()
方法,因为我发现更具说服力的。
子>