Ich analysiere eine JSON-Datei und habe zu diesem Zeitpunkt Daten aus einer Tabelle gesammelt. Kann mir jemand sagen warum, wenn ich ein Array wie dieses einstelle

function getfaq()
        {
          fetch(faq, settings)
              .then(res => res.json())
              .then((json) => {
                for(var i = 5;i<json.feed.entry.length;i++)
                {
                  col = json.feed.entry[i].gs$cell.col
                  faqdata[i-5] = [];
                  if(col == 1) {
                    faqdata[i-5][0] = "Question:"
                    faqdata[i-5][1] = json.feed.entry[i].gs$cell.inputValue
                  } else if(col == 2)
                  {
                    faqdata[i-5][0] = "Answer:"
                    if(json.feed.entry[i].gs$cell.inputvalue != "")
                    {
                      faqdata[i-5][1] = json.feed.entry[i].gs$cell.inputValue
                    } else {
                      faqdata[i-5][1] = "N/A"
                    }
                  } else if(col == 3)
                  {
                    faqdata[i-5][0] = "Command:"
                    faqdata[i-5][1] = json.feed.entry[i].gs$cell.inputValue
                  } else if(col == 4)
                  {
                    faqdata[i-5][0] = "Image:"
                    faqdata[i-5][1] = json.feed.entry[i].gs$cell.inputValue
                  } else if(col == 5)
                  {
                    faqdata[i-5][0] = "Reference:"
                    faqdata[i-5][1] = json.feed.entry[i].gs$cell.inputValue
                  }
                }
                for(var j = 0;j<faqdata.length;j++)
                {
                  if(faqdata[j][0].includes("Command:"))
                  {
                    faqC[j] = faqdata[j][1]
                    console.log(faqdata[j][1]);
                  }
                }
                
              })
            }

Meine Ausgabe sieht so aus

    [
  <1 empty item>,  'reset',
  <2 empty items>, 'justmaxed',
  <2 empty items>, 'ascended',
  <1 empty item>,  'masteries',
  <1 empty item>,  'gliding',
  <1 empty item>,  'mounts',
  <2 empty items>, 'livingworld',
  <2 empty items>, 'gold',
  <2 empty items>, 'dungeons',
  <3 empty items>, 'fractals',
  <1 empty item>,  'raid'
]

Wenn ich nur ein Protokoll hineinwerfe, sieht meine Ausgabe so aus

reset
justmaxed
ascended
masteries
gliding
mounts
livingworld
gold
dungeons
fractals
raid

Ich verstehe nicht, warum es hinzugefügt wird, wenn ich versuche, es in ein Array zu importieren, aber wenn ich die Daten protokolliere, werden sie korrekt angezeigt. Ich habe mein Bestes versucht, um es herauszufinden, aber ich weiß nicht, warum es so in das Array aufgenommen wird ...

0
Justin Russell 19 Aug. 2020 im 18:12

2 Antworten

Beste Antwort

Eine Möglichkeit, das Festlegen nicht aufeinanderfolgender Elemente des Arrays nach Index zu vermeiden, besteht darin, stattdessen Array.push

Anstatt von

faqC[j] = faqdata[j][1]

Versuchen

faqC.push(faqdata[j][1])

AUCH im Sinne einer modernen funktionalen Programmierung sollten Sie die gesamte for-Schleife durch Folgendes ersetzen:

const faqC = faqdata.filter(fd => fd[0].includes("Command:")).map(fd => fd[1]);
3
James 19 Aug. 2020 im 16:06

Die Variable j wird als Index für faqC verwendet und verursacht Ihr Problem. Wenn j 3 ist, aber faqC derzeit nur ein Element enthält, bleibt Index 2 von faqC leer. Um dieses Problem zu lösen, verwenden Sie faqC.push(faqdata[j][1), damit faqC nacheinander ausgefüllt wird.

0
Lachlan 19 Aug. 2020 im 15:29