美文网首页
操作数组以后,原数组发生改变;浅拷贝和深拷贝的区别

操作数组以后,原数组发生改变;浅拷贝和深拷贝的区别

作者: 小白白呐 | 来源:发表于2021-01-07 12:09 被阅读0次

最近遇到一个问题是,给一个数组做了排序,会改变原数组的数值

此问题有两种解决方式:

方法一:切断数据之间的联系

let _arr = JSON.parse(JSON.stringify(_this.statisticsData.useData.useClickNum)); //为了防止改变——Arr从而改变useClickNum,转变一下,切换数据联系

方法二:深拷贝

根据询问是因为浅拷贝的问题,如下提供浅拷贝和深拷贝的区别

深拷贝代码附上:

functiondeepClone(o){

    // 判断如果不是引用类型,直接返回数据即可    if (typeof o === 'string' || typeof o === 'number' || typeof o === 'boolean' || typeof o === 'undefined') {

        return o

    } else if (Array.isArray(o)) { // 如果是数组,则定义一个新数组,完成复制后返回        // 注意,这里判断数组不能用typeof,因为typeof Array 返回的是object        console.log(typeof [])  // --> object        var _arr = []

        o.forEach(item=> { _arr.push(item) })

        return _arr

    } else if (typeof o === 'object') {

        var _o = {}

        for (let key in o) {

            _o[key] = deepClone(o[key])

        }

        return _o

    }

}var arr = [1, 2, 3, 5]var cloneArr = deepClone(arr)console.log(cloneArr)  // --> [ 1, 2, 3, 5 ]console.log(arr === cloneArr)  // --> falsevar obj = { name: 'ccc', age: 18 }var cloneObj = deepClone(obj)console.log(cloneObj)  // --> { name: 'ccc', age: 18 }console.log(obj === cloneObj)  // falseobj.name = 'www'console.log(obj)    // --> { name: 'www', age: 18 }console.log(cloneObj)  // --> { name: 'ccc', age: 18 }

文章转载自:https://www.cnblogs.com/cirry/p/13395291.html

http://www.cnblogs.com/cirry/

相关文章

  • js深拷贝和浅拷贝区别

    浅拷贝和深拷贝的区别 1.浅拷贝:将源对象或者原数组的引用 ```直接赋给``` 新对象/新数组 ,新对象/新...

  • 操作数组以后,原数组发生改变;浅拷贝和深拷贝的区别

    最近遇到一个问题是,给一个数组做了排序,会改变原数组的数值 此问题有两种解决方式: 方法一:切断数据之间的联系 l...

  • 关于几个拷贝的问题

    数组浅拷贝 数组深拷贝 复合数组深拷贝

  • 深拷贝和浅拷贝

    1. 深拷贝和浅拷贝 1.浅拷贝: 将原对象或原数组的引用直接赋给新对象,新数组,新对象/数组只是原对象的一个引用...

  • JS中对象的复制

    JS中的对象复制分为两种情况:深拷贝和浅拷贝。深拷贝和浅拷贝的区别在于对数组和对象的拷贝,对它们拷贝时浅拷贝只是拷...

  • Object 对象

    什么是浅拷贝,如何实现浅拷贝?什么是深拷贝,如何实现深拷贝? 是什么: 浅拷贝: 将原对象或原数组的引用直接赋给新...

  • 如何实现数组深拷贝和浅拷贝?

    如何实现数组深拷贝和浅拷贝? 1.背景介绍 在使用JavaScript对数组进行操作的时候,我们经常需要将数组进行...

  • 深浅拷贝

    浅拷贝将原对象/原数组的引用直接赋值给新对象/新数组,新对象/新数组只是原对象/原数组的一个引用。 深拷贝将原对象...

  • 浅拷贝与深拷贝

    /*浅拷贝:拷贝地址*/ /*深拷贝:拷贝对象*/ 用Strong修饰不可变数组:浅拷贝 用Copy修饰不可变数组...

  • 浅拷贝和深拷贝

    数组的深拷贝和浅拷贝 浅拷贝:var arr = ["One","Two","Three"]; var arrto...

网友评论

      本文标题:操作数组以后,原数组发生改变;浅拷贝和深拷贝的区别

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