如何在不重复元素的情况下将元素推送到数组?

how to push elements to an array without repeating non of them?

我有this issue here recorded on a video让你更容易理解。正如您所看到的,我从一个数组中选择一些元素并将这些元素推送到另一个名为 $scope.favoriteLeague = []; 的数组中,以便制作最喜欢的联赛列表,在该视频中我将元素推送任意多次我不希望这样,我希望能够只选择列表中的每个元素一次,如果用户尝试选择收藏夹数组中已经存在的元素,则显示一条消息。

我正在使用 lodashangular,这是代码:

$scope.favoriteLeague = []; 

$scope.addToFavorites = function(league) {

   $scope.favoriteLeague.push(league);

};

html

<ion-item ng-repeat="league in favoriteLeague">

    {{league.name}}

</ion-item>

在推送之前检查数组是否包含联赛。

$scope.addToFavorites = function(league) {

    $scope.favoriteLeague.indexOf(league) === -1 ? $scope.favoriteLeague.push(league) : void 0;

};

您应该检查它是否不在数组中。 @itcouldevenbeaboat 很接近,但应该是 === -1 而不是 !== -1

$scope.addToFavorites = function(league) {

    if ($scope.favoriteLeague.indexOf(league) === -1){
        $scope.favoriteLeague.push(league);
    }

};

.indexOf() 方法可能正是您正在寻找的。将其包装在调用 addToFavorites 的代码周围(这样,如果该值已经存在,您甚至不会调用该函数):

if ($scope.favoriteLeague.indexOf(league) === -1) {

    . . . your existing call to addToFavorites . . .

}

或者,如果您使用 jQuery,您可以使用 $.inArray() 方法来做同样的事情。

实际上我根据@itcouldevenbeaboat 的回答得到了自己的解决方案

$scope.addToFavorites = function(league) {
  if ($scope.favoriteLeague.indexOf(league) === -1) {
    $scope.favoriteLeague.push(league);
  }else {
    console.log('already exists!!!!!');
  }
};