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

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

此问题有两种解决方式:

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

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/

你可能感兴趣的:(操作数组以后,原数组发生改变;浅拷贝和深拷贝的区别)