2017-01-15 6 views
-3

I for-Schleife eine einfache, die undefinedJavaScript - For-Schleife über JSON gibt 'undefiniert'

Hier gibt der Code:

var optionName = ''; 

    for(var i=0; i<extras.length; i++){ 
      optionName = extras[i].optionName; 
    } 
    console.log(optionName); 

    //  console.log(extras[0].optionName); >> Drinks 
    //  console.log(extras[1].optionName); >> Undefined 

Hier ist extras Array:

enter image description here

+2

Können Sie Ihr ** Extras ** Objekt teilen? –

+0

@AlaEddineJEBALI Es ist das auf dem Bild, Array [2] –

+0

ja ich sehe, aber in der Lage sein, das Problem mit Ihnen zu überprüfen, müssen wir sehen, dass das * extra * -Objekt in JSON Antwort –

Antwort

0

Also, Sie haben ein Array mit 2 Elementen.

extras = [ 
    {key: value}, 
    [object0, object1, object2], 
] 

Wie Sie das erste Element in Ihrem Extra Array sehen können, ist ein Objekt und das Objekt hat die key: optionName mit einem value: Drinks. Wenn Sie also

console.log(extras[0].optionName); 

aufrufen, wird der Wert von Drinks zurückgegeben.

Dann geht Ihre Schleife weiter zum nächsten Element im Array und sucht nach einem key: optionName, aber da Ihr zweites Array-Element ein Array ist, kann es den Schlüssel nicht finden und gibt undefined zurück. Da ich nicht weiß, was in den Objekten von extra[1] enthalten ist, kann ich keine Ratschläge zum Umschreiben Ihrer Schleife geben, aber oben ist die Erklärung dafür, warum Sie undefined erhalten.

Sie können einfach eine if Bedingung hinzufügen undefinierte Werte filtern:

if (extras[0].optionName) { 
    console.log(extras[0].optionName); 
} 

als undefiniert ist ein falsy Wert in JS, zu jeder Zeit, die Sie tatsächlich einen Wert nicht dort haben, wird es nicht einfach in die bewegen if Aussage.

Wenn Sie möchten, dass dies in der Schleife funktioniert, ersetzen Sie die [0] durch [i].

+0

Was Sie gesagt haben, ist 100% richtig, gibt es eine Möglichkeit, undefinierte Werte zu filtern und nur definierte zurückgeben? Ich glaube, eine "if-Bedingung" würde den Job machen! –

+0

Ich habe meine Antwort bearbeitet – Falk

0

Das zweite Element im Array ist ein Array (Array [3]), kein Objekt. optionName ist für diesen Artikel nicht definiert.

+0

Bitte überprüfen Sie den aktualisierten Code (letzte 2 Zeilen) –

+0

Es gibt immer noch keine Eigenschaft namens 'optionName' für das zweite Element im Array. Dieses Element ist ein Array (kein Objekt). Ich denke, Sie haben versucht, zwei Arrays irgendwo vor diesem Code zusammenzuführen und haben stattdessen das zweite Array als Element hinzugefügt. –

1

Das erste Array-Element hat die Eigenschaft optionName, aber nicht die zweite. Wenn Sie also auf extras[1].optionName zugreifen, existiert der Code nicht undefiniert.

+0

Bitte überprüfen Sie den aktualisierten Code (die letzten 2 Zeilen). Noch kenne ich die Lösung nicht! –

+0

Komm schon, Mann! 'Extras [0]' ist ein Objekt, ist 'Extras [1]' ein anderes Objekt? Nein, du kannst also 'extras [1] .optionName' nicht tun, vielleicht funktioniert' extras [1] [0].optionName' – Serginho

Verwandte Themen