javascript - 复杂对象的深拷贝

查看:106
本文介绍了javascript - 复杂对象的深拷贝的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

1,复杂对象描述,类似下图:

注意:bbb数组中的每一个对象都还有一个ccc数组,ccc数组里每个元素都有若干键值对。因为这是之前的图,没有修改,见谅!
2,需求描述:深拷贝这个复杂的数组对象。
还是大致描述一下我的需求吧,最外层数组有若干个对象,每一个都是一类物品,aaa是这个物品的类别(比如说笔)。bbb是这类物品的一个集合(比如说,铅笔,圆珠笔1,圆珠笔2。即bbb.name)。bbb中再有ccc数组,可以是bbb的一个属性集合(比如说是厂家a,厂家b);
3,做过的尝试:
(1),Object.assign();只能拷贝第一层。
(2),JSON.stringify()和JSON.parse(),有一些缺点,例如当某一属性值为function时就不能用这个方法。
4,目前的想法:
(1):递归复制。(新手,不常用递归,也不怎么会用递归)
(2):jq的extend。(不想引入jq,当然也不知道能不能用)
5,请各位大神指点!
6,有大神指出不能做伸手党,那么请各位大神只提供一下思路,或者一些小弟不知道的方法,或者是伪代码,感谢各位i!

解决方案

function clone(obj) {
  if (obj == null) {
    return null
  }
  if (Array.isArray(obj)) {
    const a = []
    for (let i = 0; i < obj.length; i++) {
      a.push(clone(obj[i]))
    }
    return a
  } else if (typeof obj === 'object') {
    const o = {}
    for (let key in obj) {
      o[key] = clone(obj[key])
    }
    return o
  }
  return obj
}

这篇关于javascript - 复杂对象的深拷贝的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆