此Angular过滤器正在传递ng-repeat中使用的对象数组(项目中的项目)。
[{
title: "Star Wars",
categories: ["Adventure", "Family"]
}, {
title: "Star Search",
categories: ["Realty", "Fantasy"]
}, {
title: "Star Trek",
categories: ["Sci-Fi", "Fantasy"]
}]
和一组字符串(categoriesFiltered)
["Adventure", "Sci-Fi"]
在ng-repeat中迭代 items 并将类别数组...与 categoriesFiltered 数组进行比较的最佳方法是什么?并推送与新过滤的数组匹配的项?
这是我走了多远
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;
};
});
这是plunker ...
答案 0 :(得分:0)
有一些问题。
filtered
数组不属于返回的函数,它应该在里面。items[i].categories.length
循环条件中检查for
。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;
};
});