Если вы просто хотите сделать копию объекта Javascript (включая массивы, поскольку они тоже объекты), но исключая недействительные объекты JSON (например, Date
s, Function
s и т. Д.),один из самых простых способов - преобразовать объект Javascript в строку JSON, а затем повторно проанализировать его:
function deepCopy(input){
const json = JSON.stringify(input);
return JSON.parse(json);
}
const obj1 = { "hello": "world" };
const obj2 = deepCopy(obj1);
// obj1 and obj2 are two distinct objects
obj1["hello"] = "bye";
console.log( obj2["hello"] ); // world
// this works for arrays too
const a = [1, 2, [3, 4]];
const b = deepCopy(a);
ПРИМЕЧАНИЕ: имейте в виду, что, даже если он работает, он не самый лучшийрешение (особенно из-за проблем с производительностью).
Вы также можете написать функцию, целью которой является анализ объекта Javascript, чтобы определить, может ли он быть допустимым объектом JSON (то есть простым объектомс только примитивами и массивами в нем).Таким образом, вы можете отличить от Date
s и других «сложных» объектов.Посмотрите на спецификацию JSON (или Википедию), чтобы узнать, какие типы данных поддерживает JSON.