复杂对象的深拷贝

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

注意: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!

阅读 3.4k
5 个回答
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
}

简单数据类型还好,复杂数据类型比较难办

JSON.stringfy(JSON.parse(str))

新手上路,请多包涵

Object.assign()

推荐问题
宣传栏