blog

jsのディープコピーとシャローコピー

遅れて申し訳ありませんが、私は2日間あまり無意味な話をするつもりはありません、シャローコピーとディープコピーについてだけ話しましょう、シャローコピーは単純なデータ型のみをコピーし、新しいオブジェクト内...

May 22, 2020 · 2 min. read

遅れてすみません。

くだらないことは抜きにして、ディープコピーに入りましょう。

浅いコピー 単純なデータ型のみをコピー 新しいオブジェクト内の複雑なデータ型の値が変更されると、元のオブジェクトも変更 通常のオブジェクト割り当て 新しいオブジェクトのプロパティが変更されると、元のオブジェクトも変更

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>

これ以上楽なことはない ##ドッグヘッズ

シャムロッククローニングは、彼のまだアドレスの問題を理解するために行くつもりであり、私は更新が遅れているので、私は明日シャムロッククローニングアドレスについて議論したいと思います スタックとヒープメモリ

Read next

DOMのハードコア・ラッピング

この時点でノードが更新され、ノードの最初の子が x に与えられ、x が存在しなくなるまで、ノードに格納されている子の配列に戻ります。

May 22, 2020 · 2 min read