J'ai une boucle foreach angulaire et je veux sortir de la boucle si je trouve une valeur. Le code suivant ne fonctionne pas.
angular.forEach([0,1,2], function(count){
if(count == 1){
break;
}
});
Comment puis-je l'obtenir ?
J'ai une boucle foreach angulaire et je veux sortir de la boucle si je trouve une valeur. Le code suivant ne fonctionne pas.
angular.forEach([0,1,2], function(count){
if(count == 1){
break;
}
});
Comment puis-je l'obtenir ?
El angular.forEach
La boucle ne peut pas s'interrompre sur une correspondance de condition.
Mon conseil personnel est d'utiliser un NATIVE POUR au lieu de angular.forEach
.
La boucle FOR NATIVE est autour de 90% plus rapidement que les autres boucles for.
UTILISER POUR LA BOUCLE EN ANGLE :
var numbers = [0, 1, 2, 3, 4, 5];
for (var i = 0, len = numbers.length; i < len; i++) {
if (numbers[i] === 1) {
console.log('Loop is going to break.');
break;
}
console.log('Loop will continue.');
}
Cela ne fonctionne pas pour moi. Tout ce que ça fait, c'est terminer cette itération particulière de la boucle. Mais ensuite, elle passe à l'itération suivante.
@Ben , Désolé ben , C'était mon erreur mais maintenant je mets à jour ma réponse après une longue recherche . J'espère que cela vous aidera. Je vous remercie
Il n'y a aucun moyen de le faire. Voir https://github.com/angular/angular.js/issues/263 . Selon ce que vous faites, vous pouvez utiliser un booléen pour ne pas entrer dans le corps de la boucle. Quelque chose comme :
var keepGoing = true;
angular.forEach([0,1,2], function(count){
if(keepGoing) {
if(count == 1){
keepGoing = false;
}
}
});
Je préférerais simplement ajouter un !keepGoing && return;
au début de la fonction, moins de code.
Ce ne sont pas les meilleures pratiques, ici la boucle angulaire forEach ne se casse jamais, et il n'y a rien pour casser angular.forEach. La boucle for native est environ 90 % plus rapide que angular.forEach . Il est donc préférable d'utiliser la boucle for native lorsque vous souhaitez interrompre la boucle lorsque la condition correspond. Merci
C'est exactement là où j'étais coincé... et cela m'a aidé... merci beaucoup... Quoi qu'il en soit, je voudrais savoir pourquoi la boucle forEach est insécable. Si un
Pour moi, la seule raison d'utiliser angular.forEach()
c'est que je dois prendre en charge IE8, qui n'a pas Array.forEach()
... ou Array.some()
.
Vous pouvez facilement polyfill Array.forEach. Voir le bas de la page : developer.mozilla.org/fr/US/docs/Web/JavaScript/Référence/
Si vous utilisez jQuery (donc pas jqLite) en conjonction avec AngularJS, vous pouvez itérer avec $.each - qui permet de rompre et de continuer sur la base de l'expression booléenne de la valeur de retour.
JSFiddle :
Javascript :
var array = ['foo', 'bar', 'yay'];
$.each(array, function(index, element){
if (element === 'foo') {
return true; // continue
}
console.log(this);
if (element === 'bar') {
return false; // break
}
});
Note :
Bien que l'utilisation de jQuery ne soit pas mauvaise, les deux systèmes natifs Array.some o Array.every sont recommandées par MDN, comme vous pouvez le lire à l'adresse suivante : native forEach documentation :
"Il n'y a aucun moyen d'arrêter ou de rompre une boucle forEach. La solution est d'utiliser Array.every ou Array.some"
Les exemples suivants sont fournis par MDN :
Array.some :
function isBigEnough(element, index, array){
return (element >= 10);
}
var passed = [2, 5, 8, 1, 4].some(isBigEnough);
// passed is false
passed = [12, 5, 8, 1, 4].some(isBigEnough);
// passed is true
Array.every :
function isBigEnough(element, index, array){
return (element >= 10);
}
var passed = [12, 5, 8, 130, 44].every(isBigEnough);
// passed is false
passed = [12, 54, 18, 130, 44].every(isBigEnough);
// passed is true
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
1 votes
Je ne comprends pas pourquoi vous ne trouvez pas simplement la valeur au lieu d'entrer dans une boucle. Peut-être que l'exemple que vous avez donné ne raconte pas toute l'histoire, mais je préférerais faire ce que @Aman a dit ci-dessous. Pourquoi entrer dans la boucle comme mentionné ci-dessous et exécuter une vérification à chaque fois quand some() fait exactement cela d'une manière plus élégante. Rappelez-vous que si vous traitez javascript comme un langage fonctionnel, il n'y a aucun intérêt à utiliser ces structures de contrôle de type for/while/break. C'est pourquoi foreach, find, some, etc. existent.