Проверьте уникальность в массиве, нажмите на массив, если уникальный

используя AngularJS, я создаю функцию addTodo в своем приложении.

кажется, у меня возникли проблемы с реализацией способа проверки уникальности объекта, добавляемого в массив, и с последующим выполнением дополнительных действий.

до сих пор я могу заставить дополнительные действия работать, но не первоначальную проверку уникальности. Как я могу реализовать действие проверки уникальности, а затем выполнить дополнительные действия?

в addTodo функция я пытаюсь создать такие потоки (полужирный значит не реализовано):

  1. проверьте, если todo уже в todos

    1a. если он exisit, не нажимайте, отображать предупреждение

  2. проверьте, если todo не пустой

    2a. Если он пуст, не нажимайте, отобразите alert

  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];
  }
};

Примечание 1: $scope.alert и $scope.alerts используются для отображения определенных сообщений об ошибках;

$scope.alerts[0]

"пожалуйста, добавьте текст в задачу."

$scope.alerts[1]

"добавлена новая задача!"

предупреждение, которое я хочу отобразить, если добавляемая задача уже существует, -

$scope.alerts[3] 

" задача уже в списке."

Примечание. 2: $scope.isVisible переключает видимость предупреждение

3 ответов


использовать 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];
  }
};

Если вы используете подчеркивание или лодашь, вы можете использовать этот простой код, чтобы подтолкнуть уникальных элементов в массиве.

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

надеюсь, что это помогает!!!


Если вы используете стандартную строку todo вы можете использовать массив JavaScript indexOf метод. Этот метод для типов данных объектов выполняет сопоставление ссылок.

иначе вы также можете посмотреть на jquery метод.

используйте один из следующих методов, чтобы проверить, если $scope.todos уже содержит такой элемент и показать предупреждение.