我希望找到一個示例代碼來深入複製ECMAScript5中的對象。對象和數組的ECMAScript5深層副本
複印應該能夠克隆
嵌套對象
嵌套數組
在陣列(克隆單獨地每個數組項)嵌套對象
注意:jQuery.extend()似乎不處理ca se 3)。另外,我希望在乾淨的ECMAScript中做到這一點。快速谷歌搜索沒有提出任何有價值的實施。
我希望找到一個示例代碼來深入複製ECMAScript5中的對象。對象和數組的ECMAScript5深層副本
複印應該能夠克隆
嵌套對象
嵌套數組
在陣列(克隆單獨地每個數組項)嵌套對象
注意:jQuery.extend()似乎不處理ca se 3)。另外,我希望在乾淨的ECMAScript中做到這一點。快速谷歌搜索沒有提出任何有價值的實施。
我終於塵埃落定,以jQuery.extend()
,因爲我無法找到其他好的實現
使用toSource method的emulation複製對象:如果你想要一個
<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>
一開始,但不是這個有點脆弱..循環引用可能無限循環? –
[聯繫開發人員](http://stackoverflow.com/users/9021/nickf)以獲取有關健壯性的幫助。 –
-liner(通過遍歷引用對象來檢索基元,將一個大字符串連接起來,然後將字符串解析爲一個新的對象,並使用它自己的原始葉節點)來移除對象引用)
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;
}
深複製是一個不平凡的問題,我建議你改變你的算法,所以它與淺拷貝 – Raynos
目前我的工作我正在使用jQuery.extend()並手動清理混亂後 –