Seltsames Verhalten beim tiefen Klonen dynamischer Objekte [geschlossen]JavaScript

Javascript-Forum
Guest
 Seltsames Verhalten beim tiefen Klonen dynamischer Objekte [geschlossen]

Post by Guest »

Ich habe versucht, ein dynamisches Objekt in Typoskript tief zu klonen, und alle Methoden geben nur ein leeres {}-Objekt für dieses spezielle Szenario zurück!!
Hier ist der Objekttyp, den ich tief klonen möchte

Code: Select all

fullValues: { [key : string ] : Array },
HINWEIS: fullValues wird an eine Reaktionskomponente übergeben und die unten genannten Vorgänge werden in dieser Reaktionskomponente ausgeführt! fullValues wird NIEMALS während des gesamten Lebenszyklus des Programms direkt mutiert und befindet sich zunächst in einem Zustand in der übergeordneten Komponente, wie unten gezeigt:

Code: Select all

const facetValues: { [key: string ] : Array } = {};

// Type => facetedData?: FacetCollectionType
if (facetedData) {
Object.entries(facetedData).forEach(([key, value]) => {
Object.defineProperty(facetValues, key, { value: [] as string[]});
});
}

const [ facets, setFacets ] = useState(facetValues);

{facetedData &&

Object.keys(facetedData).length !== 0 ?
Object.entries(facetedData).map(([key, options]) => (

))
:
null
}

Zufälliges Beispiel dafür, wie dieses Objekt strukturiert sein kann:

Code: Select all

{
status: [],
plan: [],
}
Ich habe die folgenden Methoden für Deepcloning ausprobiert:
Verwenden von lodash deepclone

Code: Select all

console.log(fullValues); // outputs { status: [], plan: [] }
console.log("after deep clone => ");
console.log(_cloneDeep(fullValues)); // outputs {}
Verwendung der JSON-Stringify-Methode

Code: Select all

console.log(fullValues); // outputs { status: [], plan: [] }
console.log("after deep clone => ");
console.log(JSON.parse(JSON.stringify(fullValues))); // outputs {}
Aber wenn ich das mache

Code: Select all

let fullValues: { [key : string ] : Array }  = { status: [], plan: [] };
console.log(fullValues); // outputs { status: [], plan: [] }
console.log("after deep clone => ");
console.log(_cloneDeep(fullValues)); // outputs { status: [], plan: [] }
Hier funktioniert es.
Es scheint keine Logik dafür zu geben, warum das passiert? Es macht keinen Sinn!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post