2016-12-01 1 views
0

Ich versuche, einige Eigenschaften aus einem anderen Objekt in JavaScript zu kopieren, aber fehlgeschlagen.Ich kann Eigenschaften aus einem Objekt nicht klonen oder zuweisen

Das erste, was mir aufgefallen ist, ist, dass einige Eigenschaften eines Objekts in der Chromes-Konsole etwas verblasst sind. Ich habe diese Frage gesucht und gefunden: What is the significance of faded properties when using console.dir in Chrome Developer Tools Console

Meine Aufgabe besteht darin, diese Eigenschaften zu kopieren und ihnen einige neue Werte zuzuweisen. Unabhängig davon, ob ich _.clone oder _.cloneDeep oder Object.assign() verwende, sind diese "verblassten" Eigenschaften nicht im neuen Objekt enthalten.

Use _.cloneDeep Use Object.assign()

+0

Haben Sie versucht: JSON.parse (JSON.stringify (obj))? – Lain

+0

@Lain Gibt eine Zeichenfolge ohne diese verblassten Eigenschaften oder, sagen wir, nicht aufzählbare Eigenschaften zurück. – Hegwin

+0

In Ordnung, tut mir leid, dass ich dieses Mal keine Hilfe bekommen habe. Sollte kein String tho sein, bleibt das Eigenschaftsproblem bestehen. – Lain

Antwort

1

Da diese "fade" Eigenschaften unenumerable sind. Dies bedeutet, dass Sie nicht über sie interagieren können. Daher kann Object.assign() diese Eigenschaften nicht kopieren.

let a = {}; 
 
a.x = 1; 
 
// define an unenumerable property 
 
Object.defineProperty(a, 'y', { 
 
    value: 2, 
 
    enumerable: false 
 
}); 
 
console.log(a, Object.assign({}, a)); //Object {x: 1, y: 2} Object {x: 1}

Über die Lösung können Sie die Schlüsselliste mit unenumerable Tasten entweder durch Object.getOwnPropertyNames oder Reflect.ownKeys abzurufen.

+0

Das ist ziemlich komisch..Ich weiß nicht, warum sie "unbenchbare Eigenschaften" wurden. Ich habe diese Objektdaten von einer JSON-API via Superagent erhalten – Hegwin

Verwandte Themen