Как сравнить каждое значение, присутствующее в массиве, используя .filter - PullRequest
0 голосов
/ 14 мая 2018

Это мой код для фильтрации записи

 for (var k = 0; k < $scope.hockeyPlayersId.length; k++) {
     var val = $scope.hockeyPlayersId[k];
     $scope.filterhockeyPlayers = $scope.Players.filter(function (obj, index) {
         var returnVal = true;
         if (val) {
             if (obj.PlayersId == val)
                 return 1
             else
                 return 0;
         }

         return returnVal;
     });//End of filter function ;
 }

val содержит все идентификаторы игрока, который играет в хоккей. Я сравниваю каждый PlayersId объекта obj с val, но $scope.filterhockeyPlayers возвращает неправильное значение, если $scope.hockeyPlayersId = ['22','12','21'] возвращает игроков, которые содержат только 21 идентификатор. Я хочу, чтобы игрок 22 и 12 тоже. $scope.filterhockeyPlayers значение теряется после каждого цикла for.

1 Ответ

0 голосов
/ 14 мая 2018

В вашем коде есть несколько ошибок:

  1. Вы переопределяете $scope.filterhockeyPlayers на каждой итерации цикла for, поэтому будут использоваться только результаты последнего элемента $scope.hockeyPlayersId, остальные опущены.
  2. returnVal абсолютно бесполезен. 1 или 0 будут возвращены из-за if-else.

Теперь, чтобы это исправить, вам нужно изменить код так, чтобы filter был самым внешним. И для каждого объекта в $scope.Players просто проверьте, включен ли идентификатор этого объекта в $scope.hockeyPlayersId, используя Array#indexOf или Array#includes:

 $scope.filterhockeyPlayers = $scope.Players.filter(function (obj) {   // filter objects from $scope.Players
     return $scope.hockeyPlayersId.includes(obj.PlayersId);            // where the id is included in $scope.hockeyPlayersId
 });

То же самое, что и использование цикла for, например:

$scope.filterhockeyPlayers = $scope.Players.filter(function (obj) {
     for (var k = 0; k < $scope.hockeyPlayersId.length; k++) {
         if(obj.PlayersId == $scope.hockeyPlayersId[k]) {
             return true;
         }
     }
     return false;
 });

Надеюсь, это имеет смысл; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...