ΠΠ°ΠΏΡΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΈ:
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ Π»ΠΈΠ±ΠΎ ΠΈΠΌΠ΅ΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π΄Π»Ρ _.extend()
ΠΈ _.copy()
ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈΡ
Π³Π»ΡΠ±ΠΎΠΊΠΈΠΌΠΈ, Π»ΠΈΠ±ΠΎ ΠΈΠΌΠ΅ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ Π³Π»ΡΠ±ΠΎΠΊΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ?
ΠΠΎΡΡΡ, Π² JavaScript Π½Π΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Ρ ΠΎΡΠΎΡΠ΅ΠΉ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΈ Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠΌΠ΅ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Date. ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ, Π²Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°ΡΡ Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ.
ΠΡΠ°Π²Π΄Π°, Π³Π»ΡΠ±ΠΎΠΊΠΈΠ΅ ΠΊΠΎΠΏΠΈΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π±Π΅ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ½Ρ Π² javascript. ΠΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π³ΠΎΠ²ΠΎΡΠΈΡΠ΅, ΡΡΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΏΠ΅ΡΠ΅Π²Π΅ΡΠΈΠ²Π°ΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ, Π²Π΅ΡΠ½ΠΎ? ΠΠΎΠ³Π΄Π° Π»ΡΠ΄ΠΈ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΏΠΈΡΡΡ ΡΠ±ΠΎΠ³ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄ΠΎΠ»ΠΆΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ Ρ ΡΠΆΠ΅, ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½ΠΎ ΠΈΠΌΠ΅ΡΡΠ΅Π³ΠΎ Ρ ΠΎΡΠΎΡΠΎ Π·Π°Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΡΠ»ΠΈΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΏΠ°ΡΠ½Ρ: http://stackoverflow.com/questions/728360/copying-an-object-in-javascript/728694#728694
ΠΠ½ ΠΎΡ Π²Π°ΡΡΠ²Π°Π΅Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΎΡΠ½ΠΎΠ² ΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΡΠ΅Ρ ΡΠΎ, ΡΡΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ. ΠΠ½ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ, ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΈ ΡΠΈΠΏΡ: Object, Array, Date, String, Number ΠΈ Boolean, ΠΈ ΠΎΠ½ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ, ΡΡΠΎ Π»ΡΠ±ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈΠ»ΠΈ ΠΌΠ°ΡΡΠΈΠ²Ρ Π±ΡΠ΄ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅.
ΠΠ°, ΠΈ Π΄Π°ΠΆΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΏΠ°ΡΠ½Ρ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Ρ ΠΎΡΠΎΡΠΎ. ΠΡΠ»ΠΈ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, ΠΌΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ.
ΠΠΎ Π½Π΅ΡΠΆΠ΅Π»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ Π»ΡΡΡΠ΅ Π½Π°ΠΊΠ°ΡΠΈΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ Π»ΠΎΠΌΠ°Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ?
ΠΠ΅Ρ. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ Π»ΡΡΡΠ΅ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² JavaScript. ΠΠ±ΡΡΠ½ΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ ΡΠΏΠΎΡΠΎΠ± Π΄ΠΎΡΡΠΈΡΡ ΡΠΎΠΉ ΠΆΠ΅ ΡΠ΅Π»ΠΈ, Π½Π΅ ΠΈΠΌΠ΅Ρ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ... Π·Π°ΡΠ°Π½Π΅Π΅ Π·Π½Π°Ρ ΡΡΡΡΠΊΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ.
ΠΡ , ΡΠ°ΠΊ Π²Ρ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡ Π½ΠΎΠ²ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ? Π― Π²ΠΈΠΆΡ.
Jquery.extend ΠΈΠΌΠ΅Π΅Ρ Π³Π»ΡΠ±ΠΎΠΊΡΡ ΠΎΠΏΡΠΈΡ.
+1 Π·Π° Π³Π»ΡΠ±ΠΎΠΊΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ Π΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ.
+2 Π·Π° ΡΡΠΎ - ΡΡΠΎ Π½Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ, ΡΡΠΎ Π΄Π΅Π»ΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° (Ρ.Π΅. Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΌΠ΅Π½Π΅Π΅ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅). ΠΠ΄Π½Π°ΠΊΠΎ, ΠΊΠ°ΠΊ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡ Π²ΡΡΠ΅, ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ jQuery ΠΈ Π²Π΅ΡΡΠΌΠ° ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π²ΠΎ Π²ΡΠ΅Ρ ΡΠ»ΡΡΠ°ΡΡ , ΠΊΡΠΎΠΌΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΠ³ΡΠ°Π½ΠΈΡΠ½ΡΡ . ΠΡΠ»ΠΎ Π±Ρ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ ΠΈΠΌΠ΅ΡΡ Π΅Π³ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ Π² ΠΎΠ±Π»Π΅Π³ΡΠ΅Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ΡΡΠΎΠΉ.
@kmalakoff Π½Π°ΠΏΠΈΡΠ°Π» ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ , Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π΄Π°ΡΡ Π΅ΠΌΡ ΠΎΡΠ·ΡΠ²! :)
ΠΡ Π΄Π°ΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΠΌΠΎΠΉ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ _.cloneToDepth Ρ _clone ΠΈ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π³Π»ΡΠ±ΠΈΠ½Ρ....
// Create a duplicate of a container of objects to any zero-indexed depth.
_.cloneToDepth = _.clone = function(obj, depth) {
if (typeof obj !== 'object') return obj;
var clone = _.isArray(obj) ? obj.slice() : _.extend({}, obj);
if (!_.isUndefined(depth) && (depth > 0)) {
for (var key in clone) {
clone[key] = _.clone(clone[key], depth-1);
}
}
return clone;
};
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Ρ Π½Π°ΠΏΠΈΡΠ°Π» _.own ΠΈ _.disown, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π²ΠΎΠ΄ΡΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎ Π²Π»Π°Π΄Π΅Π½ΠΈΠΈ (Π»ΠΈΠ±ΠΎ ΠΏΠ°ΡΡ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ/Π²ΡΠΏΡΡΡΠΈΡΡ, Π»ΠΈΠ±ΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°ΡΡ/ΡΠ½ΠΈΡΡΠΎΠΆΠΈΡΡ). ΠΠ½ ΡΠ΅ΠΊΡΡΡΠΈΡΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΠΎΠ΄ΠΈΠ½ ΡΡΠΎΠ²Π΅Π½Ρ Π²Π½ΠΈΠ·, Π½ΠΎ Ρ ΠΏΠΎΠ»Π°Π³Π°Ρ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ββββΠΎΠΏΡΠΈΡ Π΄Π»Ρ ΠΏΠΎΠ»Π½ΠΎΠΉ ΡΠ΅ΠΊΡΡΡΠΈΠΈ (Ρ Π±Ρ Ρ ΠΎΡΠ΅Π» ΡΠ²ΠΈΠ΄Π΅ΡΡ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ!).
_.own = function(obj, options) {
if (!obj || (typeof(obj)!='object')) return obj;
options || (options = {});
if (_.isArray(obj)) {
if (options.share_collection) { _.each(obj, function(value) { _.own(value, {prefer_clone: options.prefer_clone}); }); return obj; }
else { var a_clone = []; _.each(obj, function(value) { a_clone.push(_.own(value, {prefer_clone: options.prefer_clone})); }); return a_clone; }
}
else if (options.properties) {
if (options.share_collection) { _.each(obj, function(value, key) { _.own(value, {prefer_clone: options.prefer_clone}); }); return obj; }
else { var o_clone = {}; _.each(obj, function(value, key) { o_clone[key] = _.own(value, {prefer_clone: options.prefer_clone}); }); return o_clone; }
}
else if (obj.retain) {
if (options.prefer_clone && obj.clone) return obj.clone();
else obj.retain();
}
else if (obj.clone) return obj.clone();
return obj;
};
_.disown = function(obj, options) {
if (!obj || (typeof(obj)!='object')) return obj;
options || (options = {});
if (_.isArray(obj)) {
if (options.clear_values) { _.each(obj, function(value, index) { _.disown(value); obj[index]=null; }); return obj; }
else {
_.each(obj, function(value) { _.disown(value); });
obj.length=0; return obj;
}
}
else if (options.properties) {
if (options.clear_values) { _.each(obj, function(value, key) { _.disown(value); obj[key]=null; }); return obj; }
else {
_.each(obj, function(value) { _.disown(value); });
for(key in obj) { delete obj[key]; }
return obj;
}
}
else if (obj.release) obj.release();
else if (obj.destroy) obj.destroy();
return obj;
};
Π Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ΅Π½ ΡΠ°ΡΡΠΈΡΡΠ΅ΠΌΡΠΉ ΠΊΠ»ΠΎΠ½ ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
// Create a duplicate of all objects to any zero-indexed depth.
_.deepClone = function(obj, depth) {
if (typeof obj !== 'object') return obj;
if (_.isString(obj)) return obj.splice();
if (_.isDate(obj)) return new Date(obj.getTime());
if (_.isFunction(obj.clone)) return obj.clone();
var clone = _.isArray(obj) ? obj.slice() : _.extend({}, obj);
if (!_.isUndefined(depth) && (depth > 0)) {
for (var key in clone) {
clone[key] = _.deepClone(clone[key], depth-1);
}
}
return clone;
};
Π― Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΡΡΠΎ Ρ ΠΎΡΠΎΡΠ°Ρ ΠΈΠ΄Π΅Ρ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π³Π»ΡΠ±ΠΎΠΊΠ°Ρ ΠΊΠΎΠΏΠΈΡ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΡΡΡΠΈΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ. ΠΡΠΌΠ°Ρ Π½Π°ΠΉΡΠΈ Π±ΡΠ΄Π΅Ρ ΡΠ»ΠΎΠΆΠ½ΠΎ.
Π― Π½Π΅ Π±ΡΠ» ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠ΅Π½ ΡΠ²ΠΎΠΈΠΌ Π²ΡΠ΅ΡΠ°ΡΠ½ΠΈΠΌ ΠΎΡΠ²Π΅ΡΠΎΠΌ (Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΠ»ΡΠ½ΠΎΡΠΈ)... Π― ΠΏΡΠΈΠ΄ΡΠΌΠ°Π» Π΄Π²Π΅ Π²Π΅ΡΡΠΈΠΈ ( _.cloneToDepth
Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΏΡΠΎΡΡΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡΡΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΡΠΎΡ
ΡΠ°Π½ΡΡ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΈΡΡ
ΠΎΠ΄Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈ _.deepClone
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ):
// Create a duplicate of a container of objects to any zero-indexed depth.
_.cloneToDepth = _.containerClone = _.clone = function(obj, depth) {
if (!obj || (typeof obj !== 'object')) return obj; // by value
var clone;
if (_.isArray(obj)) clone = Array.prototype.slice.call(obj);
else if (obj.constructor!=={}.constructor) return obj; // by reference
else clone = _.extend({}, obj);
if (!_.isUndefined(depth) && (depth > 0)) {
for (var key in clone) {
clone[key] = _.clone(clone[key], depth-1);
}
}
return clone;
};
// Create a duplicate of all objects to any zero-indexed depth.
_.deepClone = function(obj, depth) {
if (!obj || (typeof obj !== 'object')) return obj; // by value
else if (_.isString(obj)) return String.prototype.slice.call(obj);
else if (_.isDate(obj)) return new Date(obj.valueOf());
else if (_.isFunction(obj.clone)) return obj.clone();
var clone;
if (_.isArray(obj)) clone = Array.prototype.slice.call(obj);
else if (obj.constructor!=={}.constructor) return obj; // by reference
else clone = _.extend({}, obj);
if (!_.isUndefined(depth) && (depth > 0)) {
for (var key in clone) {
clone[key] = _.deepClone(clone[key], depth-1);
}
}
return clone;
};
ΠΠ°ΠΊ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ @michaelficarra , Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π΅ΡΡΠ½ΡΠΌΠΈ. ΠΠΈΡΠ½ΠΎ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ:
1) _.own
/ _.disown
, ΠΊΠΎΠ³Π΄Π° Ρ Ρ
ΠΎΡΡ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΡΠΎ ΡΠ»ΠΎΠΆΠ½ΡΠΌΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΠΌΠΈ ΡΠΈΠΊΠ»Π°ΠΌΠΈ ΠΈ/ΠΈΠ»ΠΈ ΠΌΠΎΠ΄Π΅Π»ΡΠΌΠΈ Π²Π»Π°Π΄Π΅Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ΄ΡΡΠ΅Ρ ΡΡΡΠ»ΠΎΠΊ Π΄Π»Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΡΡΠΊΠΈ)
2) Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» _.cloneToDepth
/ _.containerClone
(ΡΠ΅Π΄ΠΊΠΎ!), ΠΊΠΎΠ³Π΄Π° Ρ ΠΌΠ΅Π½Ρ Π±ΡΠ»ΠΈ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΎΠΏΡΠΈΠΈ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ.
3) ΠΠ½Π΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π½ΡΠΆΠ΅Π½ _.deepClone
, Π½ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ _.clone
, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠΈΡΠ΅ΡΠ΅ ΠΎΠ±ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π³ΠΈΠ±ΠΊΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΈΠΏΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ Π½Π΅ ΠΌΠ½Π΅ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ, ΡΡΠΎ Π²Ρ ΠΌΠ½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΄ΠΈΡΠ΅, Π½ΠΎ Ρ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠΎ ΠΈ Π½Π΅ Ρ
ΠΎΡΡ ΠΈΠΌΠ΅ΡΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΡ
ΡΡΡΠ΅ΠΊΡΠΎΠ² Π½Π° ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π΅, Ρ
ΠΎΡΡ ΡΡΡΠΎΠΊΠΈ - ΡΡΠΎ ΠΎΡΠΎΠ±ΡΠΉ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΡΠ»ΡΡΠ°ΠΉ).
Π― ΠΎΡΠΏΡΠ°Π²ΠΈΠ» ΠΊΠΎΠ΄ ΠΈ ΡΠ΅ΡΡΡ Π·Π΄Π΅ΡΡ: https://github.com/kmalakoff/underscore-awesomer/commit/0cf6008f16ad6e6daf60caf456021693ef33fec5 .
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΡΠ΅, ΠΊΡΠΎ Π·Π°ΡΡΡΡΠ» Π² ΠΏΠΎΠΈΡΠΊΠ°Ρ
ΠΎΠ΄Π½ΠΎΡΡΡΠΎΡΠ½ΠΎΠ³ΠΎ Π½Π΅ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΠΏΡΠΎΡΡΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Ρ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠΎΠΉ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΎΠΉ, ΠΌΠΎΠ³ΡΡ ΠΏΡΠΎΡΡΠΎ JSON.parse(JSON.stringify(object))
.
@adamhooper ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ ΡΠ΅Π½Π΄Π΅Π½ΡΠΈΡ ΡΠ΅ΡΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈΠ»ΠΈ ΡΡΠΎ-ΡΠΎ Π² ΡΡΠΎΠΌ ΡΠΎΠ΄Π΅? ΠΠΎΡΠ΅ΠΌΡ ΠΎΠ½ Π½Π΅ΠΏΠΎΠ»Π½ΡΠΉ?
@diversario ΠΠ½ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΠΎΡΠΈΠΏ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΠΎΡΠΈΠΏΡ ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ².
Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ: ΠΎΠ½ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Π»ΡΠ±ΡΡ Π΄Π°ΡΡ Π² Π²Π°ΡΠ΅ΠΌ Π΄Π΅ΡΠ΅Π²Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². Π Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΠΎ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π΄Π°ΡΠ°ΠΌΠΈ, Π½Ρ, Π²Ρ ΠΏΡΠΎΡΡΠΎ ΡΠ΅ΡΠ°Π΅ΡΠ΅ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠΈΠΌΠΏΡΠΎΠΌ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΡΡΠ΅Π·Π½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
Π Π²Π΅ΡΠ½ΠΎ. Π ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΅Π³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ»ΠΎΠΌΠ°ΡΡ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΡΠ°ΠΊΠΈΠ΅ Π²Π΅ΡΠΈ, ΠΊΠ°ΠΊ Β«ΡΠ°Π±Π»ΠΎΠ½Π½ΡΠ΅Β» ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π½Π΅ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π»ΡΡ Π½ΠΈ Ρ ΡΠ΅ΠΌ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌ. ΠΠΎ Ρ Π²ΠΈΠΆΡ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΡ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π³Π»ΡΠ±ΠΎΠΊΠΎΠΌ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ.
Π― ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΠ» ΠΌΠΈΠΊΡΠΈΠ½ deepExtend ΠΡΡΡΠ° ΠΠΈΠ»Π°ΠΌΠ° Π² ΠΏΠ°ΠΊΠ΅Ρ npm.
@michaelficarra , ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΎΠ±ΡΡΡΠ½ΠΈΡΠ΅, ΠΏΠΎΡΠ΅ΠΌΡ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Ρ ΠΎΡΠΎΡΠΈΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΉ Π΄ΡΠ΅Π²ΠΎΠ²ΠΈΠ΄Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ?
ΠΠ»Ρ Π²ΡΠ΅Ρ
, ΠΊΡΠΎ ΠΏΡΡΠ°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄Π½ΠΎΡΡΡΠΎΡΠ½ΡΡ Π³Π»ΡΠ±ΠΎΠΊΡΡ ΠΊΠΎΠΏΠΈΡ
JSON.parse(JSON.stringify(ΠΎΠ±ΡΠ΅ΠΊΡ))
Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΎΠ½ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ Π»ΡΠ±ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Date Π² ΡΡΡΠΎΠΊΡ
-1 Π΄Π»Ρ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΏΠΎΡΠΊΠΈ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠΎΠ² Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ Π»ΡΡΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡΡ Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ API, ΡΠ΅ΠΌ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ.
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π΅ΡΡΡ ΠΌΠ΅ΡΡΠΎ Π΄Π»Ρ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½ΠΎ ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΎΠΉ ΡΠΈΠΏΠΎΠ², ΡΠ°ΠΊ ΡΡΠΎ, Π½Π° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄, ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, Π° Π½Π΅ ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΡΡΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΡΡ Π΅ΠΌ JSON ΠΈΠ»ΠΈ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠΎΠ² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΠ΅ ΠΏΠΎΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² javascript.
Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² _.extend({}, obj1, { prop1: 1, prop2: 2 })
- ΡΡΠΎ ΡΠΎ, ΡΡΠΎ ΠΌΠ½Π΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ:
_.deepClone = function(obj) {
return (!obj || (typeof obj !== 'object'))?obj:
(_.isString(obj))?String.prototype.slice.call(obj):
(_.isDate(obj))?new Date(obj.valueOf()):
(_.isFunction(obj.clone))?obj.clone():
(_.isArray(obj)) ? _.map(obj, function(t){return _.deepClone(t)}):
_.mapObject(obj, function(val, key) {return _.deepClone(val)});
};
Π Π½Π°ΡΠ΅ΠΉ ΡΠ°Π±ΠΎΡΠ΅ΠΉ ΡΡΠ΅Π΄Π΅ ΠΌΡ ΡΠ°ΡΡΠΎ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΠΌΡΡ Ρ Π²Π°ΡΠΈΠ°Π½ΡΠ°ΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΈΠ³ΡΠ°ΡΡ ΠΎΡ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΠ½ΠΎΠ³Π΄Π° Π²Π°ΠΌ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΡΡ ΠΈ ΡΠ°ΡΡΠΈΡΡΡΡΡΡ Π΄ΠΎ Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΡ. ΠΠ»ΡΠ±ΠΎΠΊΠ°Ρ ΠΊΠΎΠΏΠΈΡ Π½Π°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½Π°, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ ΡΡΠ΅ΠΉ ΠΈΠ· Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΠ³Π΄Π° ΠΈΡΡ ΠΎΠ΄Π½Π°Ρ ΡΡΡΠ»ΠΊΠ° ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½Π΅Π΅, ΡΡΠΎΠ±Ρ Π½Π΅ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π΅Ρ. Π― Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Ρ ΠΎΡΡ ΠΎΠ΄ΠΈΠ½ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Π² Π½Π°ΡΠ΅ΠΉ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Β«ΠΏΠ»ΠΎΡΠΊΠΈΠΌΒ». ΠΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π²Π΅Π·Π΄Π΅.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΈΠ½ΠΎΠ³Π΄Π° Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΠΊΠΎΠΏΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π² Π΄ΡΡΠ³ΡΡ ΡΠ»ΡΠΆΠ±Ρ Π² Π²Π°ΡΠ΅ΠΌ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΡΡΠΎΠ±Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΅Π΅, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΡΠ΅ΡΠΈΡΡ, ΡΡΠΎ Ρ Π½Π΅ΠΉ Π΄Π΅Π»Π°ΡΡ. ΠΠ°Π»ΠΈΡΠΈΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΡΠ²ΠΎΠΉΡΡΠ² ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ ΠΏΡΠΎΡΠΈΠ²ΠΎΡΠ΅ΡΠΈΡ ΡΠ΅Π»ΠΈ Π½Π°Π»ΠΈΡΠΈΡ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠΠ‘Π¬ ΡΠΌΡΡΠ», imo, ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΡΡΡΠ»ΠΊΡ Π½Π΅ΡΡΠΎΠ½ΡΡΠΎΠΉ. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ Π²Π²ΠΎΠ΄ΠΈΡΠ΅ ΡΡΡΠ»ΠΊΠΈ Π½Π° Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡΠ±ΠΎΠΊΠΈΠ΅ ΡΡΠΎΠ²Π½ΠΈ, Π²ΡΡ ΡΠ΅Π»Ρ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠΏΠΎΡΠ½ΠΎΠΉ.
Π― ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ Π΅ΡΡΡ Π΄ΠΎΡΡΠΎΠΉΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡ Π² Π΅Π³ΠΎ Π³Π»ΡΠ±ΠΈΠ½Ρ, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ΅ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡ ΡΠ°ΠΌΠΎΠ³ΠΎ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ ΡΠ»ΠΎΡ Π΄ΠΎ ΠΊΠΎΡΠ½Ρ.
Π£ Lodash Π΅ΡΡΡ ΡΡΠΎ - https://lodash.com/docs/4.17.5#cloneDeep
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ