美文网首页
vue js 常用深拷贝常用方式

vue js 常用深拷贝常用方式

作者: 翟小乙 | 来源:发表于2023-02-10 14:43 被阅读0次

vue深拷贝的常用实现方式:

一. 通过JSON.parse(JSON.stringify(obj))

  • 优缺点
    满足一般使用场景,用JSON.stringify把对象转成字符串,再用JSON.parse把字符串转成新的对象。
    但这种方法的缺陷是会破坏原型链,并且无法拷贝属性值为function的属性
let obj = {
    id: 11,
    name: '李四',
    age: 11,
}
let newObj = JSON.parse(JSON.stringify(obj))

二. Object.assign()

  • 优缺点
    当对象中只有一级属性,没有二级属性的时候,此方法为深拷贝,但是对象中有对象的时候,此方法,在二级属性以后就是浅拷贝。
let foo = {
    a: 1,
    b: 2,
    c: {
        d: 1,
    }
}
let bar = {};
Object.assign(bar, foo);
foo.a++;
foo.a === 2 //true
bar.a === 1 //true
foo.c.d++;
foo.c.d === 2 //true
bar.c.d === 1 //false
bar.c.d === 2 //true

三. 通过递归方式实现深拷贝

  • 优缺点
    比较全面的深拷贝,缺点是较为繁琐
//使用递归的方式实现数组、对象的深拷贝
function deepClone(obj) {
  //判断拷贝的要进行深拷贝的是数组还是对象,是数组的话进行数组拷贝,对象的话进行对象拷贝
  var objClone = Array.isArray(obj) ? [] : {};
  //进行深拷贝的不能为空,并且是对象或者是
  if (obj && typeof obj === "object") {
    for (key in obj) {
      if (obj.hasOwnProperty(key)) {
        if (obj[key] && typeof obj[key] === "object") {
          objClone[key] = deepClone(obj[key]);
        } else {
          objClone[key] = obj[key];
        }
      }
    }
  }
  return objClone;
}

四. 通过jQuery的extend方法实现深拷贝

推荐

var array = [1,2,3,4];
var newArray = $.extend(true,[],array); // true为深拷贝,false为浅拷贝

五. vue有现成的插件lodash实现深拷贝

推荐

安装
npm i --save lodash

引入
import _ from 'lodash';

使用
let a = any

const b = _.cloneDeep(a)

六. 其他

只有一级属性

  • Obj类型
var obj = {
    a: 1,
    b: 2
}
var obj1 = {…obj}
  • 数组类型
var arr1 = [1, 2, 3, 4]
var arr2 = arr1.concat()
var arr3 = arr1.slice(1)

相关文章

网友评论

      本文标题:vue js 常用深拷贝常用方式

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