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...

有一些问题。

  1. 你返回的 filtered 数组在返回函数之外,它应该在里面。
  2. 您没有在 for 循环条件中检查 items[i].categories.length
  3. 您使用了错误的数组来检查 indexOf
  4. 我假设您的 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;
    };
});