如何将元素推送到数组而不重复它们?

时间:2015-02-10 15:39:04

标签: javascript arrays angularjs lodash

我有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>

4 个答案:

答案 0 :(得分:4)

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

$scope.addToFavorites = function(league) {

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

};

答案 1 :(得分:1)

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

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

    . . . your existing call to addToFavorites . . .

}

或者,如果您使用的是jQuery,则可以使用$.inArray()方法执行相同的操作。

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

在推送之前,请检查阵列是否包含联盟。

$scope.addToFavorites = function(league) {

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

};