我想检查数组是否包含字符串并对其进行后续跟踪。 indexOf()不是一个选项,因为它是严格的。
您可以在app.filter中找到所描述的问题('myOtherFilter',function()
app.filter('myOtherFilter', function() {
return function(data, values) {
var vs = [];
angular.forEach(values, function(item){
if(!!item.truth){
vs.push(item.value);
}
});
if(vs.length === 0) return data;
var result = [];
angular.forEach(data, function(item){
if(vs.toString().search(item.name) >= 0) {
result.push(item);
}
});
return result;
}
});
这是正确的,是其他地方的错误吗?
答案 0 :(得分:2)
angular.forEach(data, function(item){
for(var i = 0; i < vs.length; i++){
if(item.name.search(vs[i]) >= 0) {
result.push(item);
}
}
});
答案 1 :(得分:0)
你总是可以提取Angular filter
过滤器,它接受一个数组,但会正确处理不同的类型。这是一般的想法:
app.filter('filter', function($filter) {
var filterFilter = $filter('filter');
function find(item, query) {
return filterFilter([item], query).length > 0;
}
return function(data, values) {
var result = [];
angular.forEach(data, function(item) {
for(var i = 0; i < values.length; i++) {
if(find(item, values[i])) {
result.push(item);
break;
}
}
});
return result;
};
}
});
您必须更改传入的数据的结构。传入值列表,而不是{truth: true}
列表。此解决方案允许您利用Angular“过滤器”过滤器的现有功能。