jsディープコピーの例についてのディスカッション

小云云
リリース: 2018-03-06 14:15:43
オリジナル
1418 人が閲覧しました

ディープ コピーは親オブジェクトを子オブジェクトにコピーすることであり、2 つのコピーのメモリとその後の操作は相互に影響しません。この記事では主に js のディープ コピーの例について説明します。これは、皆さんの役に立つことを願っています。

(1) 方法 1

function copy(obj1,obj2){
  var obj2=obj2||{}; 
  for(var name in obj1){    if(typeof obj1[name] === "object"){ //先判断一下obj[name]是不是一个对象
      obj2[name]= (obj1[name].constructor===Array)?[]:{}; 
      copy(obj1[name],obj2[name]); //然后来无限递归
    }else{
      obj2[name]=obj1[name];  //如果不是对象,直接赋值。
    }
  }  return obj2; 
}
ログイン後にコピー
ログイン後にコピー

使用法:

var obj1 = {
    se:[{a:1,b:2},{c:3}],
    sa:{a:"g"},
    sc:function(){console.log(1)}
}var n_obj = copy(obj1,{})
console.log(n_obj)
ログイン後にコピー
ログイン後にコピー

(2) 方法 2

function d_clone(obj) {
    return Object.getPrototypeOf(Object.create(obj));
}
ログイン後にコピー

使用方法:

var obj1 = {
    se:[{a:1,b:2},{c:3}],
    sa:{a:"g"},
    sc:function(){console.log(1)}
}var n2_obj = d_clone(obj1);
console.log(n2_obj)
ログイン後にコピー
ログイン後にコピー

(3) 方法 3

JSON.parse(JSON.stringify(obj)
ログイン後にコピー

注: obj の属性には関数を含めることはできません。

(1) 方法 1

function copy(obj1,obj2){
  var obj2=obj2||{}; 
  for(var name in obj1){    if(typeof obj1[name] === "object"){ //先判断一下obj[name]是不是一个对象
      obj2[name]= (obj1[name].constructor===Array)?[]:{}; 
      copy(obj1[name],obj2[name]); //然后来无限递归
    }else{
      obj2[name]=obj1[name];  //如果不是对象,直接赋值。
    }
  }  return obj2; 
}
ログイン後にコピー
ログイン後にコピー

使用法:

var obj1 = {
    se:[{a:1,b:2},{c:3}],
    sa:{a:"g"},
    sc:function(){console.log(1)}
}var n_obj = copy(obj1,{})
console.log(n_obj)
ログイン後にコピー
ログイン後にコピー

(2) 方法 2

function d_clone(obj) {
    return Object.getPrototypeOf(Object.create(obj));
}
ログイン後にコピー

使用法:

var obj1 = {
    se:[{a:1,b:2},{c:3}],
    sa:{a:"g"},
    sc:function(){console.log(1)}
}var n2_obj = d_clone(obj1);
console.log(n2_obj)
ログイン後にコピー
ログイン後にコピー

(3) 方法 3

JSON.parse(JSON.stringify(obj)
ログイン後にコピー

注: obj の属性には関数を含めることはできません。

関連する推奨事項:

関連する推奨事項:

JavaScript ディープ コピーのパフォーマンスについての深い理解

js のディープ コピーとシャロー コピーとは何か、およびそれらの実装方法

JavaScript のシャロー コピーとシャロー コピーの違いディープコピー

以上がjsディープコピーの例についてのディスカッションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!