Ответ 1
Вы можете использовать функцию indexOf
.
if(list.indexOf(createItem.artNr) !== -1) {
$scope.message = 'artNr already exists!';
}
Подробнее о indexOf:
В настоящее время я использую метод forEach()
angular, чтобы проверить новое значение с массивом объектов. Но это неправильный подход, потому что, например, в списке есть 20 объектов. Когда я создаю объект с существующей статьей, то if-statement in forEach сообщает один раз, когда статья существует, а 19 раз это не так.
Следующий код:
var list = [];
articlelist.forEach(function (val) {
list.push(val.artNr);
});
$log.info(list);
articlelist
содержит все 20 объектов. Для сравнения мне нужен только artNr
. Потому что, когда пользователь создает новую статью, должен быть if-Statement, чтобы проверить, существует ли добавленный artNr.
$scope.createItem = function (createItem) {
if(list.artNr === createItem.artNr) {
$scope.message = 'artNr already exists!';
}
...
};
Проблема в том, что list.artNr возвращает мне "undefined", потому что переменная списка представляет собой массив:
выводить вывод в консоли = >
Array ["AB001", "AB002", "AB003", "AB004"]
,createItem output: = >
Object { artNr: "AB001", description: "New Article" ...}
Как я могу сравнить новый созданный объект с массивом из переменной списка?
Вы можете использовать функцию indexOf
.
if(list.indexOf(createItem.artNr) !== -1) {
$scope.message = 'artNr already exists!';
}
Подробнее о indexOf:
Вы можете использовать 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, если элемент не найден.
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});
};