różnica dwóch pętli

0

Wpisując do inputa tekst sprawdzam czy przypadkiem nie powtorzył się w tablicy:
W tym przykładzie wszystko działa ok, ponieważ pętla kończy funkcję, gdy zostanie powtórzony tekst który jest juz w tablicy (tab)
(value - tekst pobrany z input)

for (const n of tab) {
        if (n === value) {
            document.querySelection('p').textContent = "było to juz"
            return
        } else {
            document.querySelection('p').textContent = ''
        }
    }

Ten przykład natomiast nie działa jak powinien bo, wyświetla napis: "bylo to juz", ale nie konczy działania i dodaje tekst wpisany w inpucie mimo powtorzenia się

tab.forEach(n=> {
        if (value === n) {
             document.querySelection('p').textContent = "było to juz"
            return
        } else {
             document.querySelection('p').textContent = ''
        }
    })

Proszę o wytłumaczenie dlaczego tak to działa, z góry dziękuję

6

For to pętla i jak umieścisz tam return, to instrukcja return spowoduje wyjście z funkcji, w której ta pętla jest umieszczona.
Foreach natomiast jest funkcją przyjmującą funkcję jako parametr, i jeżeli tam umieścisz return, to to instrukcja return spowoduje tylko wyjście z tej funkcji, która jest wykonywana na danym elemencie.

function x() {
  for (const n of tab) {
    if (cośtam) return -> wyjdzie z funkcji x
  }
}

function y() {
  tab.foreach(n => {
    if (cośtam) return -> wyjdzie z funkcji wykonywanej na elemencie n i przejdzie do wykonywania funkcji przekazanej w foreach na kolejnym elemencie 
  tablicy
  }
}
4

Jeśli chcesz zlikwidować pętlę i zastąpić to stylem bardziej funkcyjnym to niestety nie możesz każdej pętli ślepo zamieniać na forEach. Kod bardziej powinien wyglądać:

if (tab.some(n => value === n)) {
  document.querySelection('p').textContent = "było to juz"
} else {
  document.querySelection('p').textContent = ''
}

albo jeszcze lepiej :

  document.querySelection('p').textContent = tab.some(n => value === n) ? "było to juz" : ''

Niestety trzeba się zapoznać z funkcjami bibliotecznymi do przetwarzania tablic. Zysk jest taki że można znacząco skrócić kod

1 użytkowników online, w tym zalogowanych: 0, gości: 1