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

Check For Uniqueness in Array, Push To Array if Unique

本文关键字:数组 唯一 唯一性 检查 如果      更新时间:2023-09-26

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

我似乎很难实现一种方法来检查添加到数组中的对象的唯一性,并在执行其他操作时遇到问题。

到目前为止,我能够让额外的操作发挥作用,但不能对唯一性进行初步检查。如何实现唯一性检查操作,然后再执行其他操作?

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

  1. 检查todo是否已在todos中

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

  2. 检查todo是否不是空白

    2a。如果它是空白的,不要推,显示警报

  3. 如果唯一且非空白,则推送至todos,显示成功消息

当前addTodo函数(无不合格检查):

$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切换警报的可见性

以这种方式使用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];
  }
};

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

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

希望这能有所帮助!!!

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

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

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