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 ...
2 Antworten
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]);
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.