JS篇之数组、对象的克隆

1. 数组的克隆

一、 普通一维数组深克隆

    let arr = [1,2,3]

    (1) for循环遍历数组push
        
        let arr1 = []
        for( let i of arr ){
            arr1.push(i)
        }
        console.log(arr1) // [1,2,3]

    (2) slice()
    
        let arr1 = arr.slice()
        console.log(arr1) // [1,2,3]

    (3) concat()

        let arr1 = arr.concat()
        console.log(arr1) // [1,2,3]

    (4) es6 扩展运算符

        let arr1 = [...arr]
        console.log(arr1) // [1,2,3]

二、任意维数组深克隆

    let arr = [[1, 2], [3, 4], { name: 'kobe' }]
    
     1.递归法

        function deepClone( o, t={} ){
            for( let k in o ) {
                if( o.hasOwnProperty(k) ) {
                    if( o[k] instanceof Object ) {
                        t[k] = o[k] instanceof Aarray ? [] : {}
                        deepClone( o[k], t[k] )
                    }else {
                        t[k] = o[k]
                    }
                }
            }
            return t
      }

      let arr1 = deepClone(arr, [])
      arr1[0].push(5)
      arr[2].name = 'james'

      console.log(arr,arr1) // arr [[1, 2, 5], [3, 4], { name: 'kobe' }]
                            // arr1 [[1, 2, 5], [3, 4], { name: 'james' }]

    2. let arr1 = JSON.parse(JSON.stringify(arr)) // 结果同上

2. 对象的克隆

一.普通对象的深克隆(成员都是原始值类型)

    1.for循环遍历

        function copyObj(obj) {
            let res = {}
            for (let key in obj) {
               res[key] = obj[key]
            }
            return res
        }

    2.扩展运算符

        let obj1 = {...obj}

    3.Object.assign()

        let obj1 = Object.assign({},obj)

二.任意对象的深克隆

    1.递归法

        function deepClone( o, t={} ){
            for( let k in o ) {
                if( o.hasOwnProperty(k) ) {
                    if( o[k] instanceof Object ) {
                        t[k] = o[k] instanceof Aarray ? [] : {}
                        deepClone( o[k], t[k] )
                    }else {
                        t[k] = o[k]
                    }
                }
            }
            return t
      }
      let obj1 = deepClone(obj)

    2. let obj1 = JSON.parse(JSON.stringify(obj))

              

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值