14

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

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

到目前为止,我能够使其他操作起作用,但不能对唯一性进行初始检查。如何实施检查唯一性操作,然后执行其他操作?

我试图创建这样的流的 addTodo 函数(粗体表示未实现):

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

    1a。如果确实存在,请不要推送,显示警报

  2. 检查 todo 是否不为空

    2a。如果为空,请勿推送,显示警报

  3. 如果唯一且不为空,则推送到待办事项,显示成功消息

当前的 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];
  }
};

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

$scope.alerts[0]

“请在您的任务中添加文字。”

$scope.alerts[1]

“增加了一个新任务!”

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

$scope.alerts[3] 

“任务已在列表中。”

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

4

3 回答 3

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];
  }
};
于 2013-08-18T12:11:22.890 回答
2

如果您使用下划线lodash,您可以使用这个简单的代码来推送数组中的唯一项目。

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

希望这可以帮助!!!

于 2015-11-18T12:48:25.710 回答
0

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

否则,您还可以查看 jquery grep方法。

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

于 2013-08-18T11:17:37.037 回答