Angular过滤器,将ng-repeat对象中的字符串数组与字符串数组进行比较,并过滤掉不匹配的对象
Angular filter that compares an array of strings in ng-repeating objects - with an array of strings, and filters out objects that do not match
这个Angular过滤器被传递给一个ng-repeat中使用的对象数组(item in items)。
[{
title: "Star Wars",
categories: ["Adventure", "Family"]
}, {
title: "Star Search",
categories: ["Realty", "Fantasy"]
}, {
title: "Star Trek",
categories: ["Sci-Fi", "Fantasy"]
}]
和字符串数组(categoresfiltered)
["Adventure", "Sci-Fi"]
在ng-repeat中遍历项并比较类别数组的最佳方法是什么?到 catalogesfiltered 数组,并将匹配的项推入新的filtered数组?
这就是我走了多远
categoryFilter.filter('filterCategories', function () {
return function (items, categoriesFiltered) {
var filtered = [];
for (var i = 0; i < items.length; i++) {
for (var j = 0; j < items[i].categories; j++) {
if (filtered.indexOf(items[i].categories[j]) === -1) {
filtered.push(items[i]);
};
};
};
return filtered;
};
});
这是一个活塞…
有几个问题。
- 您返回的
filtered
数组落在返回函数之外,它应该在内部。 - 您没有在
for
循环条件下检查items[i].categories.length
。 - 你正在使用错误的数组来检查
indexOf
。 - 我假设你的
categoriesFiltered
的例子是一个打字错误看起来像["Adventure", "Sci-Fi"]
因为[{"Adventure", "Sci-Fi"}]
是无效的javascript。
试试这个:
categoryFilter.filter('filterCategories', function () {
return function (items, categoriesFiltered) {
var filtered = [];
for (var i = 0; i < items.length; i++) {
for (var j = 0; j < items[i].categories.length; j++) {
if (categoriesFiltered.indexOf(items[i].categories[j]) > -1) {
filtered.push(items[i]);
}
}
}
return filtered;
};
});
相关文章:
- 将数组对象传递到struts2中的操作类
- 如何使用jquery返回php-json数组对象
- 从其名称获取javascript数组对象
- 值未与数组对象绑定
- 如何按数组/对象值的倍数过滤对象数组
- 在表中显示数组对象
- 在数组对象中分组
- 将第二个或多个数组推送到数组对象 AngularJS 中
- 重新排列 JavaScript 数组/对象
- 键上的javascript数组对象过滤器
- handontable:在不更改数据数组/对象的情况下隐藏某些列
- 用于跟踪购物车可用性的Javascript数组/对象/哈希表
- 重建有角度的java脚本数组对象
- 对JSON数组对象进行排序
- 连接与数组对象相关的文本:方式和位置
- 哪些浏览器和版本支持将常见的类数组对象直接传递到fn.apply()
- 如何使用Handlebars循环数组对象和模板
- 是否可以引用JS数组/对象中的另一个元素
- Javascript中的名称索引-数组/对象
- 数组长度不等于数组对象