J'utilise actuellement la méthode forEach()
- d'angular pour vérifier la nouvelle valeur avec le tableau d'objets. Mais ce n'est pas la bonne approche car par exemple, dans la liste, il y a 20 objets. Lorsque je crée un objet avec un article existant, l'instruction if de forEach indique une fois que l'article existe et 19 fois qu'il n'en est pas un.
Le code suivant:
var list = [];
articlelist.forEach(function (val) {
list.Push(val.artNr);
});
$log.info(list);
La articlelist
contient les 20 objets. Pour comparer, je n'ai besoin que de la variable artNr
. Parce que lorsque l'utilisateur crée un nouvel article, alors devrait être un if-Statement pour vérifier si le artNr ajouté existe déjà.
$scope.createItem = function (createItem) {
if(list.artNr === createItem.artNr) {
$scope.message = 'artNr already exists!';
}
...
};
Le problème est que list.artNr me renvoie "indéfini" car la variable de liste est un tableau:
list output dans console =>
Array ["AB001", "AB002", "AB003", "AB004"]
,createItem output: =>
Object { artNr: "AB001", description: "New Article" ...}
Comment puis-je comparer le nouvel objet créé avec le tableau de la variable de liste?
Vous pouvez utiliser la fonction indexOf
.
if(list.indexOf(createItem.artNr) !== -1) {
$scope.message = 'artNr already exists!';
}
En savoir plus sur indexOf:
Vous pouvez utiliser indexOf () . Comme:
var Color = ["blue", "black", "brown", "gold"];
var a = Color.indexOf("brown");
alert(a);
La méthodeindexOf ()recherche le tableau pour l'élément spécifié et renvoie sa position. Et retourne -1 si l’article n’est pas trouvé.
Si vous souhaitez effectuer une recherche de bout en bout, utilisez la méthode lastIndexOf () :
var Color = ["blue", "black", "brown", "gold"];
var a = Color.lastIndexOf("brown");
alert(a);
La recherche commencera à la position spécifiée ou à la fin si aucune position de départ n’est spécifiée, et terminera la recherche au début du tableau.
Renvoie -1 si l'élément n'est pas trouvé.
U peut utiliser quelque chose comme ça ....
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});
};