Krótka odpowiedź: użyj for...breakdo tego lub zmień kod, aby uniknąć złamania forEach. Nie używaj .some()ani .every()do emulacji for...break. Przepisz kod, aby uniknąć for...breakpętli lub użyj for...break. Za każdym razem, gdy używasz tych metod jako for...breakalternatywnego, Bóg zabija kociaka.
Długa odpowiedź:
.some()i .every()obie zwracają booleanwartość, .some()zwraca, truejeśli istnieje jakikolwiek element, dla którego przekazana funkcja zwraca true, każde zwracafalse jeśli istnieje jakikolwiek element, dla którego przekazana funkcja zwracafalse . To właśnie oznaczają te funkcje. Używanie funkcji do tego, co nie oznaczają, jest znacznie gorsze niż używanie tabel do układu zamiast CSS, ponieważ frustruje każdego, kto czyta twój kod.
Ponadto jedynym możliwym sposobem wykorzystania tych metod jako for...breakalternatywy jest .some()wywołanie efektów ubocznych (zmiana niektórych zmiennych poza funkcją wywołania zwrotnego), i to niewiele różni się odfor...break .
Zatem użycie .some()lub .every()jako for...breakalternatywa pętli nie jest wolna od skutków ubocznych, nie jest to wtedy dużo czystszefor...break , jest to frustrujące, więc nie jest lepiej.
Zawsze możesz przepisać kod, aby nie było potrzeby for...break. Możesz filtrować tablicę za pomocą .filter(), możesz podzielić tablicę za pomocą .slice()i tak dalej, następnie użyj .forEach()lub .map()dla tej części tablicy.
returnrzeczywiście kontynuuje iterację, pominie każdy kod, który pojawi się po nim w bloku. Weźmy na przykład ten kod[1,2,3].forEach(function(el) { if(el === 2) { console.log(`Match on 2!`); return; } console.log(el); });:.console.log(el);Zostaną one pominięte, gdy 2 zostaną dopasowane.