【问题标题】:how to push elements to an array without repeating non of them?如何将元素推送到数组而不重复它们?
【发布时间】:2015-02-10 15:39:03
【问题描述】:

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

【问题讨论】:

  • 也许在调用.push()之前查看数组是否已经包含league?也许是.indexOf()

标签: javascript arrays angularjs lodash


【解决方案1】:

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

$scope.addToFavorites = function(league) {

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

};

【讨论】:

    【解决方案2】:

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

    if ($scope.favoriteLeague.indexOf(league) === -1) {
    
        . . . your existing call to addToFavorites . . .
    
    }
    

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 这可能是错误的,因为 indexOf 返回 -1 表示未找到,其计算结果为真(尝试!!-1)。此外,如果联赛是第一名,则 indexOf 返回 0,其计算结果为 false。
      • 在您编辑完答案后,我的评论现在是错误的。反正这是一团糟。
      • 我只是向你道歉,谢谢大家的帮助@martinczerwi
      【解决方案4】:

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

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

      【讨论】:

      • 当实际上只有一个结果动作时,为什么要使用三元组?为什么不直接使用if
      • 其实我是这样做的,现在它不允许选择任何东西
      • @talemyn 你能告诉我你是怎么做到的吗?只是一个代码示例,对不起,我没有得到你
      • 原因是这段代码不工作是因为它检查了错误的条件。 . . !== -1 表示它存在于数组中,因此只有当联赛已经在列表中时代码才会触发。使用空列表,它永远不会触发。检查需要=== -1 才能工作,这意味着联盟已经在数组中。
      • @talemyn 因为三元语句让其他程序员知道你是 BOSS……尽管正如你的评论所指出的那样,混淆条件很容易
      猜你喜欢
      • 2012-07-10
      • 1970-01-01
      • 1970-01-01
      • 2014-11-13
      • 1970-01-01
      • 2013-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多