Skip to content

Instantly share code, notes, and snippets.

@mplorentz
Forked from Maddix/copyItem.js
Last active August 29, 2015 14:16
Show Gist options
  • Save mplorentz/5926a18f63dca5e99ace to your computer and use it in GitHub Desktop.
Save mplorentz/5926a18f63dca5e99ace to your computer and use it in GitHub Desktop.
deepCopyItem = function(item) {
var listProto = Object.prototype.toString.call([]);
var objectProto = Object.prototype.toString.call({});
var itemProto = Object.prototype.toString.call(item);
if (itemProto != listProto && itemProto != objectProto) {
console.warn("Cannot create a deep copy from " + itemProto);
return undefined;
}
var newItem = function() {
if (itemProto === listProto) return [];
else return {};
}();
var newItemProto = Object.prototype.toString.call(newItem);
for (var itemIndex in item) {
var itemValue = item[itemIndex];
var itemValueProto = Object.prototype.toString.call(itemValue);
var newValue;
if (itemValueProto === listProto) {
newValue = deepCopyItem(itemValue);
} else if (itemValueProto === objectProto) {
newValue = deepCopyItem(itemValue);
} else {
newValue = itemValue;
}
if (newItemProto === listProto) newItem.push(newValue);
else newItem[itemIndex] = newValue;
}
return newItem;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment