【问题标题】:How to compare the each value present in array by using .filter如何使用 .filter 比较数组中存在的每个值
【发布时间】:2018-05-14 16:05:09
【问题描述】:

这是我过滤掉记录的代码

 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 包含打曲棍球的玩家的所有 ID。我将 obj 的每个 PlayersId 与 val 进行比较,但如果 $scope.hockeyPlayersId = ['22','12','21'] 然后返回仅包含 21 个 id 的玩家,则 $scope.filterhockeyPlayers 返回错误值。我也想要 22 和 12 的球员。 $scope.filterhockeyPlayers 值在每个 for 循环后丢失。

【问题讨论】:

  • 查看输入和预期输出数组会很有帮助。
  • @Randy : $scope.filterhockeyPlayers 的值在每个 for 循环后被擦除,即 k = 0 我有两个相似的播放器,但是当 k 变为 1 时,这两个值被擦除
  • 除了代码中的逻辑错误之外,您应该清楚这个赋值:$scope.filterhockeyPlayers = 会导致您丢失数据。但由于您不愿意分享输入数据,因此无法判断还发生了什么。
  • 您能否提供$scope 它是什么以及它的属性/方法是什么。还有为什么你在过滤器函数中有returnVal 只是返回true 而不是你在改变它?

标签: javascript angularjs filter


【解决方案1】:

您的代码有一些问题:

  1. 您将在 for 循环的每次迭代中覆盖 $scope.filterhockeyPlayers,因此将仅使用 $scope.hockeyPlayersId 的最后一项的结果,其余的将被省略。
  2. returnVal 完全没用。由于if-else10 将被返回。

现在,要解决此问题,您必须更改代码,使 filter 位于最外层。对于$scope.Players 中的每个对象,只需使用Array#indexOfArray#includes 检查该对象的ID 是否包含在$scope.hockeyPlayersId 中:

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

我希望这是有道理的;-)

【讨论】:

  • :谢谢。每次 for 循环后价值都不会丢失。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多