遅れてすみません。
くだらないことは抜きにして、ディープコピーに入りましょう。
浅いコピー 単純なデータ型のみをコピー 新しいオブジェクト内の複雑なデータ型の値が変更されると、元のオブジェクトも変更 通常のオブジェクト割り当て 新しいオブジェクトのプロパティが変更されると、元のオブジェクトも変更
var obj = {
id: 1,
uname: 'xiaohu',
xh:{
play: 'nanqiu'
},
clor: ['pink', 'red']
};
まず実装して、それから最適化について話しましょう
var o = {};
for (var k in obj) {
// // kはプロパティ名である。obj[k]それは属性値だ。
// o[k] = obj[k];
// // }
// Object.assign(o, obj); // Object.assign 浅いコピー操作だ。
// console.log(o);
// カプセル化された関数
function deepCopy (newobj, oldobj){
for (var k in oldobj) {
// 属性値がどのデータ型に属するかを判断する
// 1.属性の値を取得する oldobj[k]
var item = oldobj[k];
// 2.値が配列かどうかを判断する
if (item instanceof Array) {
newobj[k] = [];
// o.clor = [];
deepCopy(newobj[k], item)
}else if(item instanceof Object){
// 3.これがオブジェクトかどうかを判断する
newobj[k] = {};
deepCopy(newobj[k], item);
}else{
// 4.単純なデータ型
newobj[k] = item;
}
}
}
deepCopy(o, obj);
console.log(obj);
o.uname = 'sb';
o.xh.play = 'ssb';
</script>
諺にあるように、機能を実現するためにあなたの心をクリアにします。
今回はコードが肥大化していると感じるでしょう
ディスクを
<script>
var bf = function (bos) {
var ar = bos instanceof Array ? [] : {};
for (var k in bos){
var vul = bos[k]
// console.log(vul);
ar[k] = vul !== null && typeof vul === 'objeck' ? bf(vul) : vul
}
return ar;
}
var x = {
a: 123,
b:{
name:"hu",
age:18
},
c:[1, ],
d:undefined,
e:null
}
var y = bf(x);
console.log(y);
</script>
これ以上楽なことはない ##ドッグヘッズ