美文网首页
JS深拷贝的实现

JS深拷贝的实现

作者: blueskirt | 来源:发表于2018-06-04 11:24 被阅读0次

JS深拷贝, 即传值拷贝, 需要新建一处内存,实现拷贝,具体实现如下:

//ES5深拷贝

(1)循环递归:

function deepClone(obj){

    var newObj= obj instanceof Array?[]:{};

    for(var i in obj){

      newObj[i]=typeof obj[i]=='object'?  deepClone(obj[i]):obj[i];

    }

    return newObj;

}

(2)转json再转回来:只有可以转成JSON格式的对象才可以这样用,像function,RegExp对象没办法转成JSON。

var obj1 = { body: { a: 10 } };

var obj2 = JSON.parse(JSON.stringify(obj1));

obj2.body.a = 20;

(3)Jquery: $.extend():底层依然是递归循环调用.

var $ = require('jquery');

var obj1 = {

a: 1,

b: { f: { g: 1 } },

c: [1, 2, 3]

};

var obj2 = $.extend(true, {}, obj1);

(4) lodash : _.cloneDeep:

var _ = require('lodash');

var obj1 = {

a: 1,

b: { f: { g: 1 } },

c: [1, 2, 3]

};

var obj2 = _.cloneDeep(obj1);

console.log(obj1.b.f === obj2.b.f);

//ES6深拷贝:确切说ES6没有提供完善的深拷贝方法,但是如果数据只有一层的话,可以简单实现:

(1)数组只有一层的话可以用:Array.from:

var arr1=[1,2,3];

var arr2=Array.from(arr1);

(2)数组只有一层的话可以用三个点:...

var arr1=[1,2,3];

var arr2=[...arr1];

(3)对象只有一层的话可以用:Object.assign()函数

let aClone = Object.assign({}, a);

相关文章

  • js浅拷贝深拷贝

    js浅拷贝,深拷贝的简单实现 基础数据 浅拷贝 深拷贝

  • Javascript中的深拷贝

    JS 中深拷贝的几种实现方法 1、使用递归的方式实现深拷贝 //使用递归的方式实现数组、对象的深拷贝 functi...

  • JS 中深拷贝的几种实现方法

    JS 中深拷贝的几种实现方法 1、使用递归的方式实现深拷贝 方法二 2、通过 JSON 对象实现深拷贝 缺点 (1...

  • JS深拷贝的实现

    JS深拷贝, 即传值拷贝, 需要新建一处内存,实现拷贝,具体实现如下: //ES5深拷贝 (1)循环递归: fun...

  • js 实现深拷贝

    一般不会深拷贝函数等,所以一般用递归和JSON方法即可。 如果要实现函数等拷贝,比较完美的做法: function...

  • js实现深拷贝

    一、js数据类型 基本数据类型:String、Number、Boolean、Null、Undefined复杂数据类...

  • JS中的深拷贝与浅拷贝

    知乎:js中的深拷贝和浅拷贝? 掘金: js 深拷贝 vs 浅拷贝 前言 首先深拷贝与浅拷贝只针对 Object,...

  • 2020前端高频面试题总结(附答案)

    [ js基础题 ] 1. new的实现原理是什么? 2. 深拷贝和浅拷贝的区别是什么 深拷贝 浅拷贝 3. bin...

  • 手撕常见面试题

    DOM 事件代理 数组 对象 扁平化 去重 - unique() 拷贝 浅拷贝 深拷贝 copy()函数实现 JS...

  • iOS基础知识点(网络摘抄)

    1.父类实现深拷贝时,子类如何实现深拷贝。父类没有实现深拷贝时,子类如何实现深拷贝? 深拷贝同浅拷贝的区别:...

网友评论

      本文标题:JS深拷贝的实现

      本文链接:https://www.haomeiwen.com/subject/nxmesftx.html