it-swarm.com.ru

Проверьте, существует ли значение в массиве (AngularJS)

В настоящее время я использую forEach()- метод angular для проверки нового значения с массивом объектов. Но это неправильный подход, потому что, например, в списке 20 объектов. Когда я создаю объект с существующей статьей, тогда оператор if в forEach сообщает один раз, что статья существует, а 19 раз - нет.

Следующий код:

var list = [];

articlelist.forEach(function (val) {
   list.Push(val.artNr);
});

$log.info(list);

articlelist содержит все 20 объектов. Для сравнения мне нужен только artNr. Потому что, когда пользователь создает новую статью, тогда должен быть оператор if, чтобы проверить, существует ли добавленный artNr.

$scope.createItem = function (createItem) {
  if(list.artNr === createItem.artNr) {
      $scope.message = 'artNr already exists!';
  }
...
};

Проблема в том, что list.artNr возвращает меня "undefined", потому что переменная списка является массивом:

вывод списка в консоли => Array ["AB001", "AB002", "AB003", "AB004"],

выход createItem: => Object { artNr: "AB001", description: "New Article" ...}

Как я могу сравнить новый созданный объект с массивом из переменной списка?

43
yuro

Вы можете использовать функцию indexOf.

if(list.indexOf(createItem.artNr) !== -1) {
  $scope.message = 'artNr already exists!';
}

Подробнее об indexOf:

108
Juha Tauriainen

Вы можете использовать indexOf () . Подобно:

var Color = ["blue", "black", "brown", "gold"];
var a = Color.indexOf("brown");
alert(a);

МетодindexOf ()ищет в массиве указанный элемент и возвращает его позицию. И вернуть -1 , если элемент не найден.


Если вы хотите искать от начала до конца, используйте метод lastIndexOf () :

    var Color = ["blue", "black", "brown", "gold"];
    var a = Color.lastIndexOf("brown");
    alert(a);

Поиск начнется в указанной позиции или в конце, если не указана начальная позиция, и завершит поиск в начале массива.

Возвращает -1 , если элемент не найден.

18
Muhammad Awais

Вы можете использовать что-то вроде этого ....

  function (field,value) {

         var newItemOrder= value;
          // Make sure user hasnt already added this item
        angular.forEach(arr, function(item) {
            if (newItemOrder == item.value) {
                arr.splice(arr.pop(item));

            } });

        submitFields.Push({"field":field,"value":value});
    };
1
Taran