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

9voto

Julian E. Punkte 4687

Wenn es sich um ein Problem handelt, das bei der Arbeit mit Mongoose auftritt, kann Folgendes passieren:

console.log(object)

gibt alles zurück, einschließlich des gewünschten Schlüssels.

console.log(object.key)

gibt undefined zurück.

Wenn das passiert, bedeutet es, dass der Schlüssel im Mongoose Schema fehlt. Wenn Sie ihn hinzufügen, wird das Problem behoben.

8voto

remidej Punkte 1050

Für mich stellte sich heraus, dass es sich um ein problem mit Mongoose handelte.

Ich habe über Objekte iteriert, die ich aus einer Mongo-Abfrage erhalten habe. Ich musste einfach entfernen:

items = await Model.find()

Und ersetze es durch:

items = await Model.find().lean()

4voto

user_CC Punkte 4586

Dies könnte jemandem helfen, da ich ein ähnliches Problem hatte, bei dem JSON.parse () ein Objekt zurückgab, das ich mit console.log () ausdrucken konnte, aber ich konnte nicht auf die spezifischen Felder zugreifen und keiner der obigen Lösungsansätze für mich funktionierte. Wie die Verwendung der Kombination von JSON.parse() mit JSON.stringify().

var jsonObj = JSON.parse(JSON.stringify(responseText))

// where responseText is a JSON String returned by the server.

console.log(jsonObj) ///Hat das Objekt richtig gedruckt
console.log(jsonObj.Body) /// Hat Undefined gedruckt

Ich habe das Problem schließlich gelöst, indem ich einen anderen Parser von ExtJs Ext.decode() verwendet habe;

var jsonObj = Ext.decode(responseText)
console.log(jsonObj.Body) //Funktionierte...

3voto

Ich hatte gerade dasselbe Problem mit einem Dokument, das aus MongoDB geladen und mit Mongoose verwendet wurde.

Es stellte sich heraus, dass ich die Eigenschaft find() verwende, um nur ein Objekt zurückzugeben. Also habe ich find() in findOne() geändert und alles hat bei mir funktioniert.

Lösung (wenn du Mongoose verwendest): Stelle sicher, dass du nur ein Objekt zurückgibst, damit du sein object.id analysieren kannst, oder es wird als Array behandelt und du musst darauf so zugreifen: object[0].id.

3voto

Tushar Shukla Punkte 4238

Ich hatte das gleiche Problem und keine der oben genannten Lösungen hat bei mir funktioniert und es fühlte sich danach irgendwie wie Rätselraten an. Allerdings hat es bei mir funktioniert, meinen Code, der das Objekt erstellt, in eine setTimeout-Funktion zu packen.

setTimeout(function() {
   var myObj = xyz; // etwas Code zur Erstellung eines komplexen Objekts wie oben
   console.log(myObj); // das funktioniert
   console.log(myObj.propertyName); // das funktioniert auch
});

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