【发布时间】:2015-07-27 00:29:51
【问题描述】:
这个 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"]
}]
还有一个字符串数组(categoriesFiltered)
["Adventure", "Sci-Fi"]
遍历 ng-repeat 中的 items 并将 categories 数组...与 categoriesFiltered 数组进行比较的最佳方法是什么,并将匹配的 items 推送到新的 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;
};
});
这里是plunker...
【问题讨论】:
-
方法看起来很合理......它有效吗?有些人可能会使用
Array.prototype.filter()或Array.prototype.map() -
我会研究这些方向...谢谢@charlietfl
-
如果它有效则没有真正的需要...for循环运行良好...是否有问题?如果这只是一个代码审查问题,最好在codereview.stackexchange.com 上问那些问题这里的问题是针对实际问题的
-
道歉@charlietfl - 我没有回答你的问题,for循环不能正常工作
-
您能在plunker 中为此制作一个简单的演示吗?不需要任何 CSS 或任何花哨的东西
标签: javascript arrays angularjs angularjs-ng-repeat angularjs-filter