Seltsames Verhalten beim tiefen Klonen dynamischer Objekte [geschlossen]
Posted: 05 Jan 2025, 12:11
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
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:
Zufälliges Beispiel dafür, wie dieses Objekt strukturiert sein kann:
Ich habe die folgenden Methoden für Deepcloning ausprobiert:
Verwenden von lodash deepclone
Verwendung der JSON-Stringify-Methode
Aber wenn ich das mache
Hier funktioniert es.
Es scheint keine Logik dafür zu geben, warum das passiert? Es macht keinen Sinn!
Hier ist der Objekttyp, den ich tief klonen möchte
Code: Select all
fullValues: { [key : string ] : Array },
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
}
Code: Select all
{
status: [],
plan: [],
}
Verwenden von lodash deepclone
Code: Select all
console.log(fullValues); // outputs { status: [], plan: [] }
console.log("after deep clone => ");
console.log(_cloneDeep(fullValues)); // outputs {}
Code: Select all
console.log(fullValues); // outputs { status: [], plan: [] }
console.log("after deep clone => ");
console.log(JSON.parse(JSON.stringify(fullValues))); // outputs {}
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: [] }
Es scheint keine Logik dafür zu geben, warum das passiert? Es macht keinen Sinn!