function deepCopy(object) {
if (object instanceof Date) {
return new Date(+object);
}
var copy = Array.isArray(object) ? [] : {};
for (var key in object) {
if (object.hasOwnProperty(key)) {
if (typeof object[key] == "object") {
copy[key] = deepCopy(object[key]);
} else {
copy[key] = object[key];
}
}
}
return copy;
}
var a = { x: 1, y: 2, z: [[2, 2, 8], 2, 3], w: new Date(2014, 1, 1, 12, 0, 0) };
var b = deepCopy(a); // b — это отдельный объект
/*
console.log(a);
console.log(b);
*/
b.x = 10;
console.log(a.x); // 1
// a.z и b.z указывают на разные массивы:
b.z.push(4);
console.log(a.z); // [1, 2, 3]
// a.w и b.w независимы друг от друга
b.w.setFullYear(2015);
console.log(a.w.getFullYear()); // 2014
b.z[0].push(4);
console.log(a.z[0]);
ZnVuY3Rpb24gZGVlcENvcHkob2JqZWN0KSB7CiAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRGF0ZSkgewogICAgICAgIHJldHVybiBuZXcgRGF0ZSgrb2JqZWN0KTsKICAgIH0KICAgIHZhciBjb3B5ID0gQXJyYXkuaXNBcnJheShvYmplY3QpID8gW10gOiB7fTsKICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHsKICAgICAgICBpZiAob2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkpIHsKICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3Rba2V5XSA9PSAib2JqZWN0IikgewogICAgICAgICAgICAgICAgY29weVtrZXldID0gZGVlcENvcHkob2JqZWN0W2tleV0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgY29weVtrZXldID0gb2JqZWN0W2tleV07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gY29weTsKfQoKCnZhciBhID0geyB4OiAxLCB5OiAyLCB6OiBbWzIsIDIsIDhdLCAyLCAzXSwgdzogbmV3IERhdGUoMjAxNCwgMSwgMSwgMTIsIDAsIDApIH07CnZhciBiID0gZGVlcENvcHkoYSk7IC8vIGIg4oCUINGN0YLQviDQvtGC0LTQtdC70YzQvdGL0Lkg0L7QsdGK0LXQutGCCi8qCmNvbnNvbGUubG9nKGEpOwpjb25zb2xlLmxvZyhiKTsKKi8KYi54ID0gMTA7CmNvbnNvbGUubG9nKGEueCk7IC8vIDEKCi8vIGEueiDQuCBiLnog0YPQutCw0LfRi9Cy0LDRjtGCINC90LAg0YDQsNC30L3Ri9C1INC80LDRgdGB0LjQstGLOgpiLnoucHVzaCg0KTsKY29uc29sZS5sb2coYS56KTsgLy8gWzEsIDIsIDNdCgovLyBhLncg0LggYi53INC90LXQt9Cw0LLQuNGB0LjQvNGLINC00YDRg9CzINC+0YIg0LTRgNGD0LPQsApiLncuc2V0RnVsbFllYXIoMjAxNSk7CmNvbnNvbGUubG9nKGEudy5nZXRGdWxsWWVhcigpKTsgLy8gMjAxNAoKYi56WzBdLnB1c2goNCk7CmNvbnNvbGUubG9nKGEuelswXSk7