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      更新时间:2023-09-26

这个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;
    };
});

这是一个活塞…

有几个问题。

  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;
    };
});