461 Stimmen

Kann nicht auf Objekteigenschaft zugreifen, obwohl sie in einem Konsolenprotokoll angezeigt wird

Unten finden Sie die Ausgabe dieser beiden Protokolle. Das erste zeigt deutlich das gesamte Objekt mit der Eigenschaft, auf die ich zugreifen möchte, aber in der nächsten Zeile des Codes kann ich nicht darauf zugreifen mit config.col_id_3 (sehen Sie das "undefined" im Screenshot?). Kann das jemand erklären? Ich kann auf jede andere Eigenschaft zugreifen, außer auf field_id_4.

console.log(config);
console.log(config.col_id_3);

Das ist, was diese Zeilen in der Konsole ausgeben

Konsolenausgabe

1voto

Rando Shtishi Punkte 1152

Zuerst prüfen Sie den Typ wie folgt:

console.log(typeof config);

Wenn der obige Befehl "object" ausgibt, ist es sehr einfach, verwenden Sie einfach die Klammernotation. Die Klammernotation kann sehr nützlich sein, wenn Sie dynamisch nach den Werten einer Eigenschaft suchen möchten.

Führen Sie den folgenden Befehl aus:

console.log(config[col_id_3]);

Wenn es sich um einen String handelt, müssen Sie ihn zuerst in ein Objekt umwandeln. Führen Sie dazu den folgenden Befehl aus:

var object = JSON.parse(config);

Und verwenden Sie danach die Klammernotation, um auf die Eigenschaft zuzugreifen, wie unten gezeigt:

console.log(object[col_id_3]);

0voto

Adebola Punkte 539

Ich hatte heute ein ähnliches Problem in React. Letztendlich habe ich festgestellt, dass das Problem durch den noch nicht festgelegten Status verursacht wurde. Ich rief user.user.name auf und obwohl es in der Konsole angezeigt wurde, konnte ich nicht darauf zugreifen, bis ich eine Überprüfung einfügte, um zu überprüfen, ob user.user festgelegt war, und dann user.user.name aufzurufen.

0voto

Karam Qusai Punkte 735

Das ist das, was für mich funktioniert hat (mit Vue JS):

const auth = undefined;

console.log(auth); // undefined

// Kein Fehler
console.log(auth?.user?.name); // undefined

0voto

Nilupul Heshan Punkte 479

Ich habe viele Antworten auf diese Frage ausprobiert und endlich herausgefunden, was passiert ist.

Auch wenn das Objekt mit console.log(foo) ausgegeben wird, werden die get und set Methoden nur generiert, wenn new Foo() verwendet wird. Du musst die Instanz mit einem einfachen JS-Objekt initialisieren.

Bitte schau hier nach: https://stackoverflow.com/a/41153231/5954248

0voto

Navneet Karnani Punkte 43

Im Kontext dieser Antwort: https://stackoverflow.com/a/52994419

Die Lösung, um die Dateien neu zu generieren, ist möglicherweise nicht immer machbar. Entfernen Sie also die "Nicht-Leerzeichen"-Zeichen vor dem String. Wenn Sie also die Feldnamen mit trim bearbeiten können, würde das die Dinge aufräumen.

So etwas in der Art:

const records = parse(csvData, {
      columns: (colNameArray) => {
        return colNameArray.map((value, index) => {          
          return index === 0 ? value.trim() : value;
        });
      },
      onRecord: mapper.mapRow
    });

Wenn Ihnen die Leistung nicht wichtig ist, können Sie die index-Überprüfung auch überspringen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X