[1,2,3].forEach(function(el) {
if(el === 1) break;
});
Comment puis-je faire cela à l'aide de la nouvelle - forEach
méthode en JavaScript?
[1,2,3].forEach(function(el) {
if(el === 1) break;
});
Comment puis-je faire cela à l'aide de la nouvelle - forEach
méthode en JavaScript?
Il n'y a pas de possibilité de break
en forEach
. Pour interrompre l'exécution, vous auriez à jeter une exception de quelque sorte. par exemple.
var BreakException= {};
try {
[1,2,3].forEach(function(el) {
if(el === 1) throw BreakException;
});
} catch(e) {
if (e!==BreakException) throw e;
}
Exceptions JavaScript ne sont pas très jolies. Une traditionnelle for
boucle peut être plus approprié si vous avez vraiment besoin d' break
à l'intérieur.
Au lieu de cela, utiliser des Array#some
:
[1,2,3].some(function(el) {
return el === 1;
});
Cela fonctionne parce qu' some
retours true
dès les rappels, exécuté dans le tableau de commande, retour true
, de court-circuiter l'exécution du reste.
some
, son inverse every
(qui va s'arrêter sur un return false
), et forEach
sont tous ECMAScript Cinquième Édition de méthodes qui doivent être ajoutés à l' Array.prototype
sur les navigateurs où ils manquent.
Vous pouvez utiliser chaque méthode:
[1,2,3].every(function(el) {
return !(el === 1);
});
pour les vieux navigateur prend en charge l'utilisation:
if (!Array.prototype.every)
{
Array.prototype.every = function(fun /*, thisp*/)
{
var len = this.length;
if (typeof fun != "function")
throw new TypeError();
var thisp = arguments[1];
for (var i = 0; i < len; i++)
{
if (i in this &&
!fun.call(thisp, this[i], i, this))
return false;
}
return true;
};
}
plus de détails ici.
Si vous souhaitez utiliser Dean Edward de la suggestion et de jeter le StopIteration erreur de sortir de la boucle sans avoir à prendre l'erreur, vous pouvez utiliser les paramètres suivants de la fonction (à l'origine à partir d'ici):
// Use a closure to prevent the global namespace from be polluted.
(function() {
// Define StopIteration as part of the global scope if it
// isn't already defined.
if(typeof StopIteration == "undefined") {
StopIteration = new Error("StopIteration");
}
// The original version of Array.prototype.forEach.
var oldForEach = Array.prototype.forEach;
// If forEach actually exists, define forEach so you can
// break out of it by throwing StopIteration. Allow
// other errors will be thrown as normal.
if(oldForEach) {
Array.prototype.forEach = function() {
try {
oldForEach.apply(this, [].slice.call(arguments, 0));
}
catch(e) {
if(e !== StopIteration) {
throw e;
}
}
};
}
})();
Le code ci-dessus vous donne la possibilité d'exécuter du code comme le suivant, sans avoir à faire votre propre try-catch clauses:
// Show the contents until you get to "2".
[0,1,2,3,4].forEach(function(val) {
if(val == 2)
throw StopIteration;
alert(val);
});
Une chose importante à retenir est que cela ne fera que mettre à jour le Tableau.le prototype.forEach fonction si elle existe déjà. Si elle n'existe pas déjà, il ne modifiera pas la.
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.