531 Stimmen

Wie kann man Javascript forEach stoppen?

Ich spiele mit Node.js und Mongoose - ich versuche, einen bestimmten Kommentar in einer tiefen Kommentarverschachtelung mit rekursiver Funktion zu finden und forEach innerhalb. Gibt es eine Möglichkeit, Node.js zu stoppen forEach ? So wie ich das verstehe, ist jeder forEach Iteration ist eine Funktion und ich kann nicht einfach break nur return aber das wird nicht aufhören forEach .

function recurs(comment) {
    comment.comments.forEach(function(elem) {

        recurs(elem);

        //if(...) break;

    });
}

25voto

Ich vermute, Sie wollen Array.prototype verwenden. finden. Find bricht sich selbst ab, wenn es Ihren spezifischen Wert im Array findet.

var inventory = [
  {name: 'apples', quantity: 2},
  {name: 'bananas', quantity: 0},
  {name: 'cherries', quantity: 5}
];

function findCherries(fruit) { 
  return fruit.name === 'cherries';
}

console.log(inventory.find(findCherries)); 
// { name: 'cherries', quantity: 5 }

11voto

exmaxx Punkte 2864

Sie können Lodashs forEach Funktion, wenn Ihnen die Verwendung von Bibliotheken von Drittanbietern nichts ausmacht.

Ejemplo:

var _ = require('lodash');

_.forEach(comments, function (comment) {
    do_something_with(comment);

    if (...) {
        return false;     // Exits the loop.
    }
})

6voto

    var f = "how to stop Javascript forEach?".split(' ');
    f.forEach(function (a,b){
        console.info(b+1);
        if (a == 'stop') {
            console.warn("\tposition: \'stop\'["+(b+1)+"] \r\n\tall length: " + (f.length)); 
            f.length = 0; //<--!!!
        }
    });

4voto

Nicolas Bouvrette Punkte 3230

Array.forEach nicht gebrochen werden kann und mit try...catch oder hakelige Methoden wie Array.every o Array.some macht Ihren Code nur noch schwerer verständlich. Es gibt nur zwei Lösungen für dieses Problem:

1) Verwenden Sie eine alte for Schleife: Dies ist die kompatibelste Lösung, kann aber bei häufigem Gebrauch in großen Codeblöcken sehr schwer zu lesen sein:

var testArray = ['a', 'b', 'c'];
for (var key = 0; key < testArray.length; key++) {
    var value = testArray[key];
    console.log(key); // This is the key;
    console.log(value); // This is the value;
}

2) die neue ECMA6-Spezifikation (2015) in Fällen zu verwenden, in denen Kompatibilität kein Problem darstellt. Beachten Sie, dass selbst im Jahr 2016 nur wenige Browser und IDEs eine gute Unterstützung für diese neue Spezifikation bieten. Während dies für iterierbare Objekte (z. B. Arrays) funktioniert, müssen Sie, wenn Sie dies für nicht iterierbare Objekte verwenden möchten, die Object.entries Methode. Diese Methode ist seit dem 18. Juni 2016 kaum noch verfügbar, und selbst Chrome erfordert ein spezielles Flag, um sie zu aktivieren: chrome://flags/#enable-javascript-harmony . Für Arrays brauchen Sie das alles nicht, aber die Kompatibilität bleibt ein Problem:

var testArray = ['a', 'b', 'c'];
for (let [key, value] of testArray.entries()) {
    console.log(key); // This is the key;
    console.log(value); // This is the value;
}

3) Viele Menschen würden zustimmen, dass weder die erste noch die zweite Option gute Kandidaten sind. Bis Option 2 zum neuen Standard wird, bieten die meisten populären Bibliotheken wie AngularJS und jQuery ihre eigenen Schleifenmethoden an, die allem in JavaScript verfügbaren überlegen sein können. Auch für diejenigen, die diese großen Bibliotheken noch nicht verwenden und nach leichtgewichtigen Optionen suchen, bieten sich Lösungen wie este kann verwendet werden und ist fast gleichwertig mit ECMA6, wobei die Kompatibilität mit älteren Browsern erhalten bleibt.

0voto

D G ANNOJIRAO Punkte 60

Der nachstehende Code unterbricht die foreach-Schleife, sobald die Bedingung erfüllt ist, siehe Beispiel

    var array = [1,2,3,4,5];
    var newArray = array.slice(0,array.length);
    array.forEach(function(item,index){
        //your breaking condition goes here example checking for value 2
        if(item == 2){
            array.length = array.indexOf(item);
        }

    })
    array = newArray;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X