javascript - ForEach fungerer ikke, men For fungerer fint


Min logikk fungerer fint med for-løkke, men den fungerer ikke med foreach.

Ikke sikker på hvorfor?

Nedenfor er koden min.

  for (let i = 1; i < flatItems.length; i++) {
    const flatItem = flatItems[i]
    const depthDiff = flatItem.depth - (stack.length - 1)
    if (depthDiff <= 0) {
      removeFromEnd(stack, -depthDiff + 1)
    }
    const stackTop = stack[stack.length - 1]
    const newEl = {
      text: flatItem.text,
      children: [],
    }
    stackTop.children.push(newEl)
    stack.push(newEl)
  }

Utdata er ,

rot -A -B ---C

Og jeg prøvde med, forEach

flatItems.forEach(flatItem => {})

Men min utdata er forskjellig,

root -A -A -B ---C

Så problemet er at en ekstra -A blir lagt til.

Hvordan får jeg det til å fungere ved å bruke forEach. Vennligst hjelp.

Svar #1

i for-løkken din er den første 'i' satt til 1 og ikke fra 0, så løkken starter fra indeks 1. I .forEach() starter løkken fra 0, derfor starter løkken fra 0. Derfor får du en ekstra løkke og en ekstra 'A'

Svar #2

Du starter for-løkka på indeksen 1 i stedet for null

for (let i = 1; i < flatItems.length; i++)
-------------^

foreach starter på indeks null som standard

Du kan sjekke i løkken din om indeksen er null og bruke return for å få samme resultat

Liker :

flatItems.forEach((flatItem, index) => {
    if (index === 0) return;

})

Eller ved å bruke slice :

flatItems.slice(1).forEach(flatItem => {})

Relaterte artikler