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

этот вопрос уже есть ответ здесь:

в настоящее время я использую forEach() - метод угловой проверки нового значения с помощью массива объектов. Но это неправильный подход, потому что например в списке 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!';
  }
...
};

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

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

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

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

3 ответов


можно использовать


можно использовать indexOf (). Например:

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

на indexOf () метод поиска в массиве заданного элемента, и возвращает его позицию. И возвращайся!--3-->-1 если элемент не найден.


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

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

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

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


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

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