数组的深度拷贝方法_将一个数组拷贝到另一个数组

数组的深度拷贝方法_将一个数组拷贝到另一个数组数组对象深拷贝封装_数组深拷贝

数组的深度拷贝方法_将一个数组拷贝到另一个数组"

分析

深拷贝就是将数据在堆中进行了拷贝的结果,这样对复制过后的对象的操作便不会影响到原对象。

有如下方法
使用解构赋值 
使用 Object.create
使用 JSON.parse 和 JSON.stringify
使用 structuredClone
使用第三方库,例如 lodash
自己书写方法实现

方法

1、解构赋值有个问题,只能复制对象内第一层的值,更深一层便无能为力了。如([...arr])
2、使用 Object.create (let personobj = Object.create(person)) Object.create 对于数组的深拷贝不理想
Object.create 使用现有的对象来创建一个新的对象。同样的,也只能解决第一层的复制。
3、JSON.parse 和 JSON.stringify:先用 JSON.stringify 将对象序列化成字符串,再用 JSON.parse 解析回来,可以达到深拷贝的效果,并且对于多层对象同样有效。
但是对于对象中有用户定义的类型无效(如:obj={
    path: 'login',
    name: 'login',
    meta: {
      i18n: 'menu.login',
      name: i18n.t('menu.login'),
      disabled: true,
    },
    component: () => import('@/views/Login.vue'),
  })里面的i18n.t语言切换,component属性都不能有效拷贝
  4、全局的 structuredClone() 方法使用结构化克隆算法将给定的值进行深拷贝。
  但同样对方法或自定义对象无力。使用方法(https://developer.mozilla.org/zh-CN/docs/web/api/structuredClone)
  5、使用第三方库,例如 lodash 官网(https://www.lodashjs.com/docs/lodash.cloneDeep#_clonedeepvalue)
如(_.cloneDeep(person))
6、自身书写实现如下

深拷贝方法封装

const copyList = (arr: any) => {
  const result = []
  for (const item of arr) {
    result.push(deepclone(item))
  }
  return result
}
const deepclone: any = (obj: any) => {
  if (typeof obj === 'object') {
    // console.log(1, '是否死循环')
    if (Array.isArray(obj)) {
      return copyList(obj)
    } else {
      const result: any = {}
      for (const key in obj) {
        result[key] = deepclone(obj[key])
      }
      return result
    }
  } else {
    return obj
  }
}

今天的文章数组的深度拷贝方法_将一个数组拷贝到另一个数组分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/69423.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注