我希望找到一个示例代码来对 ECMAScript5 中的对象进行深度复制。
复制应该可以克隆
嵌套对象
嵌套数组
数组中的嵌套对象(单独克隆每个数组项)
注意:jQuery.extend() 似乎无法处理案例 3)。另外,我希望在干净的 ECMAScript 中做到这一点。快速谷歌搜索并没有带来任何有价值的实现。
我希望找到一个示例代码来对 ECMAScript5 中的对象进行深度复制。
复制应该可以克隆
嵌套对象
嵌套数组
数组中的嵌套对象(单独克隆每个数组项)
注意:jQuery.extend() 似乎无法处理案例 3)。另外,我希望在干净的 ECMAScript 中做到这一点。快速谷歌搜索并没有带来任何有价值的实现。
我终于安顿下来了,jQuery.extend()
因为我找不到其他好的实现
如果你想要一个单线(通过迭代引用的对象来检索原语来删除对象引用,连接一个大字符串,然后用它自己的原始叶节点将字符串解析成一个新对象)
JSON.parse(JSON.stringify(obj))
或者如果您需要执行许多副本
function deepCopy(o) {
var copy = o,k;
if (o && typeof o === 'object') {
copy = Object.prototype.toString.call(o) === '[object Array]' ? [] : {};
for (k in o) {
copy[k] = deepCopy(o[k]);
}
}
return copy;
}
使用toSource 方法的模拟来复制对象:
<script type="text/javascript">
Object.prototype.getSource = function() {
var output = [], temp;
for (var i in this) {
if (this.hasOwnProperty(i)) {
temp = i + ":";
switch (typeof this[i]) {
case "object" :
temp += this[i].getSource();
break;
case "string" :
temp += "\"" + this[i] + "\""; // add in some code to escape quotes
break;
default :
temp += this[i];
}
output.push(temp);
}
}
return "{" + output.join() + "}";
}
var baz = {"alpha":{"beta":{"charlie": ["delta","epsilon",{"omega":"zeta"}]}}};
!!Object.prototype.toSource ? alert((baz).toSource() ) : alert((baz).getSource() );
</script>