【问题标题】:filter ng-repeat using various array or object items?使用各种数组或对象项过滤 ng-repeat?
【发布时间】:2014-05-14 02:37:01
【问题描述】:

好的,我有一个 ng-repeat:

<div id="scrolltwo" class="animate-repeat panel" ng-repeat="items in arrayfull |filter:filtertype ">

在过滤器类型中我有:

[[0] => "Typeone", [1] => "Typetwo" ]

如何让过滤器遍历整个数组并匹配与值匹配的结果?

使用自定义过滤器更新:

<div id="scrolltwo" class="animate-repeat panel" ng-repeat="items in arrayfull | array | filter:matchaccnttypes(accnttypes)">

有效的数组过滤器:

.filter('array', function() {
  return function(items) {
    console.log(items);
    var filtered = [];
    angular.forEach(items, function(item) {
      filtered.push(item);
    });
   return filtered;
  };
})

匹配不匹配的帐户类型!:

                    $scope.matchaccnttypes = function matchaccnttypes(query) {
                        return function(items) {
                                return items.Organtype.match(query); 
                            angular.forEach($scope.accnttypes, function(value, key){
                                console.log(key + ': ' + value);
                             });
                        }
                    }; 

它只返回传递给 $scope.accntypes 数组的最后一个值,这是我上面的示例数组..

【问题讨论】:

  • 您的意思是如果一个项目与数组中的 一个 值匹配则通过?还是全部
  • 数组中的一个值..
  • 如果您的 arrayfull = [1,2,3,4] 和 filtertype =[1,2] 。你期待的结果是什么?
  • 我希望结果是 NEWarrayfull = [1,2]
  • @marcKline 这就是我认为我已经完成了一半但失败了,我会在这里发布代码。

标签: javascript angularjs


【解决方案1】:

借助 underscoreJS 的自定义过滤器。这是Fiddle

app.filter('arrayFilter', function() {
    return function(input, filterType) {
         return  _.intersection(input,filterType);
    };
});

没有 UnderscoreJS

app.filter('arrayFilter', function() {
    return function(input, filterType) {
       var filterdArray =[];
         angular.forEach(input, function(inputValue, key){
             angular.forEach(filterType, function(filterTypeValue, key){
                 if(inputValue==filterTypeValue){
                     filterdArray.push(inputValue);
                 }
     });

     });
     return filterdArray;

    };
});

ng-repeat应按以下方式使用。

ng-repeat="array in arrayfull | arrayFilter : filterType"

【讨论】:

  • 并且没有下划线?
  • 如果是两个对象呢?
  • 你的意思是filterType是两个对象?像 [[1,3],[4,6]] ?
  • 我的意思是过滤器类型是 {} 和 arrayfull 一样
  • 在这种情况下,必须进行对象比较。
猜你喜欢
  • 2019-03-12
  • 2016-07-05
  • 1970-01-01
  • 2013-12-05
  • 2016-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多