Angularjs ng-repeat 过滤了一个 属性,属性 重复问题

Angularjs ng-repeat filtered by one property, property duplicate issue

我想按球队过滤我的数组并显示每个球队的所有球员,但如果球队名称相似,例如。 'team beta' 和 'team beta z' 出现重复问题。 球员在两支球队中都显示...

这里是示例代码: https://jsfiddle.net/lukasz9999/qpqsuvc5/1/

我觉得问题出在过滤方法上

<div ng-repeat="playerPerTeam in playersToFilter() | filter:filterTeams">
   <b>{{playerPerTeam.team}}</b>

<li ng-repeat="player in players | filter:{team: playerPerTeam.team} | filter:searchFilter">{{player.name}}</li>        
</div>


$scope.players = [{name: 'Gene', team: 'team alpha'},
                {name: 'George', team: 'team beta'},
                {name: 'Steve', team: 'team gamma'},
                {name: 'Paula', team: 'team beta'},
                {name: 'Paula2', team: 'team beta z'},
                {name: 'Scruath of the 5th sector', team: 'team gamma'}];



var indexedTeams = [];

$scope.playersToFilter = function() {
    indexedTeams = [];
    return $scope.players;

}

$scope.filterTeams = function(player) {

    var teamIsNew = indexedTeams.indexOf(player.team) == -1;
    console.log("nt "+teamIsNew)
    if (teamIsNew) {
        indexedTeams.push(player.team);
    }
    return teamIsNew;
}

name: Paula2 应该只在 "team beta z" 中,但也在 "team beta" 中。

感谢您的任何建议

您必须在您使用的 ng-repeat="" 末尾使用 track by $index

通过这样做,angular 使用数组中的索引而不是它们的值来标识元素。

示例:

ng-repeat="playerPerTeam in playersToFilter() | filter:filterTeams track by $index"

true 放在过滤器语句之后即可。所以,

filter:{team: playerPerTeam.team}

应该是

filter:{team: playerPerTeam.team}:true

精确匹配。 https://docs.angularjs.org/api/ng/filter/filter

你可以看到 plunker