Krótka odpowiedź: użyj for...break
do tego lub zmień kod, aby uniknąć złamania forEach
. Nie używaj .some()
ani .every()
do emulacji for...break
. Przepisz kod, aby uniknąć for...break
pętli lub użyj for...break
. Za każdym razem, gdy używasz tych metod jako for...break
alternatywnego, Bóg zabija kociaka.
Długa odpowiedź:
.some()
i .every()
obie zwracają boolean
wartość, .some()
zwraca, true
jeś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...break
alternatywy 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...break
alternatywa 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.
return
rzeczywiś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.