Javascript 检查数组中的唯一性,如果唯一,则推送到数组

Javascript 检查数组中的唯一性,如果唯一,则推送到数组,javascript,arrays,angularjs,push,Javascript,Arrays,Angularjs,Push,使用AngularJS,我在我的应用程序中创建了一个addTodo函数 我似乎很难实现一种方法来检查被添加到数组中的对象的唯一性,然后再执行其他操作 到目前为止,我能够让其他操作正常工作,但无法对唯一性进行初始检查。我如何实现检查唯一性操作,然后再执行其他操作 我试图创建的addTodo函数如下(Bold表示未实现): 检查todo是否已在todo中 1a如果确实存在,则不推,显示警报 检查todo是否为空 2a。如果为空,则不按,显示警报 如果唯一且不为空,则按至待办事项,显示成功消息 当前

使用AngularJS,我在我的应用程序中创建了一个addTodo函数

我似乎很难实现一种方法来检查被添加到数组中的对象的唯一性,然后再执行其他操作

到目前为止,我能够让其他操作正常工作,但无法对唯一性进行初始检查。我如何实现检查唯一性操作,然后再执行其他操作

我试图创建的addTodo函数如下(Bold表示未实现):

  • 检查todo是否已在todo中

    1a如果确实存在,则不推,显示警报

  • 检查todo是否为空

    2a。如果为空,则不按,显示警报

  • 如果唯一且不为空,则按至待办事项,显示成功消息

  • 当前addTodo函数(不带反求检查):

    注1:
    $scope.alert
    $scope.alerts
    用于显示某些错误消息

    “请向任务中添加文本。”

    “添加了新任务!”

    如果要添加的任务已存在,则要显示的警报为

    $scope.alerts[3] 
    
    “任务已在列表中。”


    注2:
    $scope.isVisible
    切换警报的可见性

    如果您使用的是标准字符串
    todo
    ,则可以使用javascript数组方法。对象数据类型的此方法不进行引用匹配

    另外,您还可以查看jquery方法

    使用以下方法之一检查
    $scope.todos
    是否已包含此类元素并显示警报。

    使用以下方法:

    $scope.addTodo = function(){
      $scope.isVisible = true;
      if ($scope.todo) {
        if ($scope.todos.indexOf($scope.todo) == -1) {
            $scope.todos.push($scope.todo);
            $scope.todo = '';
            $scope.alert = $scope.alerts[1];
        }else{
         // $scope.todo is already in the $scope.todos array, alert the user
            $scope.alert = $scope.alerts[3];
        }
      }else{
        $scope.alert = $scope.alerts[0];
      }
    };
    
    如果您使用的是或,则可以使用此简单代码在数组中推送唯一的项

    if (_.findWhere($scope.todos, $scope.todo) == null) {
        $scope.todos.push($scope.todo);
    }
    

    希望这有帮助

    所以
    todo
    是一个简单的字符串还是一个对象?它是一个简单的字符串,是的,你已经检查了我的答案。我已经检查了,谢谢!在此基础上,我对代码进行了如下编辑,但仍然允许将重复项推送到数组中<代码>$scope.addTodo=function(){$scope.isVisible=true;var todo=$scope.todo;var todo=$scope.todo;if(todo==todo.indexOf(todo)){$scope.alert=$scope.alerts[3];}else if($scope.todo){$scope.todo.push($scope.todo);$scope.todo=';$scope.alert=$scope.alerts[1];}els{$scope.alert=$scope.alerts[0];}太棒了,谢谢!解决了我的主要问题,即不确定在流程中的何处执行操作,以及如何根据我已经拥有的内容正确执行操作。其他人注意:mef的流程与我上面建立的流程不同,但实际上是正确的查看方式:首先,检查todo是否为空。如果不是,则检查它是否唯一。我在下面代码中的陷阱是,我太执着于这样一个想法,即我需要先检查todo是否唯一,然后再检查它是否为空。
    $scope.alerts[3] 
    
    $scope.addTodo = function(){
      $scope.isVisible = true;
      if ($scope.todo) {
        if ($scope.todos.indexOf($scope.todo) == -1) {
            $scope.todos.push($scope.todo);
            $scope.todo = '';
            $scope.alert = $scope.alerts[1];
        }else{
         // $scope.todo is already in the $scope.todos array, alert the user
            $scope.alert = $scope.alerts[3];
        }
      }else{
        $scope.alert = $scope.alerts[0];
      }
    };
    
    if (_.findWhere($scope.todos, $scope.todo) == null) {
        $scope.todos.push($scope.todo);
    }