角度过滤器,用于比较ng重复对象中的字符串数组 - 使用字符串数组,并过滤​​掉不匹配的对象

时间:2015-07-27 00:29:51

标签: javascript arrays angularjs angularjs-ng-repeat angularjs-filter

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

1 个答案:

答案 0 :(得分:0)

有一些问题。

  1. 您返回的filtered数组不属于返回的函数,它应该在里面。
  2. 您未在items[i].categories.length循环条件中检查for
  3. 您使用了错误的数组来检查indexOf
  4. 我假设您的categoriesFiltered示例是错误的["Adventure", "Sci-Fi"],因为[{"Adventure", "Sci-Fi"}]是无效的javascript。
  5. 试试这个:

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