Angular 将 ng-repeating 对象中的字符串数组与字符串数组进行比较的过滤器,并过滤掉不匹配的对象
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(项目中的项目)中使用的对象数组。
[{
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 数组...与 [=25= 进行比较的最佳方法是什么? ]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...
有一些问题。
- 你返回的
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;
};
});
此 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 并将 categories 数组...与 [=25= 进行比较的最佳方法是什么? ]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...
有一些问题。
- 你返回的
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;
};
});