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:
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!
Ich habe versucht, ein dynamisches Objekt in Typoskript tief zu klonen, und alle Methoden geben nur ein leeres {}-Objekt [b]für dieses spezielle Szenario[/b] zurück!!
Hier ist der Objekttyp, den ich tief klonen möchte
[code]fullValues: { [key : string ] : Array },
[/code]
[b]HINWEIS[/b]: fullValues wird an eine Reaktionskomponente übergeben und die unten genannten Vorgänge werden in dieser Reaktionskomponente ausgeführt! fullValues wird [b]NIEMALS[/b] 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]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]
Zufälliges Beispiel dafür, wie dieses Objekt strukturiert sein kann:
[code]{
status: [],
plan: [],
}
[/code]
Ich habe die folgenden Methoden für Deepcloning ausprobiert:
[b]Verwenden von lodash deepclone[/b]
[code]console.log(fullValues); // outputs { status: [], plan: [] }
console.log("after deep clone => ");
console.log(_cloneDeep(fullValues)); // outputs {}
[/code]
[b]Verwendung der JSON-Stringify-Methode[/b]
[code]console.log(fullValues); // outputs { status: [], plan: [] }
console.log("after deep clone => ");
console.log(JSON.parse(JSON.stringify(fullValues))); // outputs {}
[/code]
Aber wenn ich das mache
[code]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: [] }
[/code]
Hier funktioniert es.
Es scheint keine Logik dafür zu geben, warum das passiert? Es macht keinen Sinn!