通过在NG重复循环中的其他数组中的其他阵列中的滤过量数组



如何根据ng-repeat中的其他数组过滤数组的结果。

数组我要过滤:

[
    [
    'gender': 'male',
    'languages': ['German', 'English'],
    'country': 'Marocco'
    ],
    [
    'gender': 'female',
    'languages': ['German', 'French'],
    'country': 'Kosovo'
    ]
] 

我想通过此对象过滤:

   | filter:{'languages': ['Urdu', 'French'], 'country': ['Kosovo']}

预期结果:

[
'gender': 'female',
'languages': ['German', 'French'],
'country': 'Kosovo'
]

这是基于您的代码的示例。我做了一些关键更改:

  1. 您的数据数组是对象的数组。

  2. 我将国家更改为您的过滤对象中的值。如果你还是希望它是一个数组,然后只需更改自定义中的代码滤波器像语言一样工作。

    var app = angular.module('myApp',[]);
    app.controller('MyCtrl', ['$scope', function($scope) {
        $scope.data= [
            {
                'gender': 'male',
                'languages': ['German', 'English'],
                'country': 'Marocco'
            },
            {
                'gender': 'female',
                'languages': ['German', 'French'],
                'country': 'Kosovo'
            }
        ];
    }]);
    // Custom filter for our objects
    app.filter('myFilter', function () {
        return function (people, filterPerson) {
            var filtered = [];
            // Check if any elements in checkArray are in sourceArray
            var includesAny= function(checkArray,sourceArray){
                checkArray.forEach(function(element) {
                    if (sourceArray.includes(element)){return true;}
                });
                return false;
            };
            for (var i = 0; i < people.length; i++) {
                var person = people[i];
                if (filterPerson.country && filterPerson.country != person.country) {
                    continue;
                }
                if (filterPerson.gender && filterPerson.gender != person.gender) {
                    continue;
                }
                if (filterPerson.languages && includesAny(filterPerson.languages,person.languages)) {
                    continue;
                }
                filtered.push(person);
            }
            return filtered;
        };
    });
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>AngularJS Example</title>
    <!-- AngularJS -->
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.js"></script>
</head>
<body ng-app="myApp">
<div ng-controller="MyCtrl">
    <h1>Unfiltered Data</h1>
    <ul>
        <li ng-repeat="person in data">
            {{ person }}
        </li>
    </ul>
    <h1>Filtered Data</h1>
    <ul>
        <li ng-repeat="person in data | myFilter:{'languages': ['Urdu', 'French'], 'country': 'Kosovo'}">
            {{ person }}
        </li>
    </ul>
</div>
</body>
</html>

最新更新