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

Jam*_*urn 14 javascript arrays push angularjs

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

我似乎无法实现一种方法来检查添加到数组中的对象的唯一性,并使其后跟其他操作.

到目前为止,我能够使其他操作正常工作,但不能初步检查唯一性.如何实现对唯一性操作的检查,然后执行其他操作?

addTodo函数我试图像这样创建流程(粗体意味着没有实现):

  1. 检查todo是否已经在todos中

    1A.如果确实存在,请不要按,显示警报

  2. 检查待办事项是否为空白

    2A.如果是空白,请不要按,显示警报

  3. 如果是唯一而非空白,请按todos,显示成功消息

当前的addTodo函数(没有unqiueness检查):

$scope.addTodo = function(){
  $scope.isVisible = true;
  if ($scope.todo) {
    $scope.todos.push($scope.todo);
    $scope.todo = '';
    $scope.alert = $scope.alerts[1];
  }else{
    $scope.alert = $scope.alerts[0];
  }
};
Run Code Online (Sandbox Code Playgroud)

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

$scope.alerts[0]
Run Code Online (Sandbox Code Playgroud)

"请为你的任务添加文字."

$scope.alerts[1]
Run Code Online (Sandbox Code Playgroud)

"增加了一项新任务!"

如果要添加的任务已存在,我想显示的警报是

$scope.alerts[3] 
Run Code Online (Sandbox Code Playgroud)

"任务已在列表中."

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

Meh*_*hdi 21

Array.indexOf这种方式:

$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];
  }
};
Run Code Online (Sandbox Code Playgroud)