最近遇到一个问题是,给一个数组做了排序,会改变原数组的数值
此问题有两种解决方式:
方法一:切断数据之间的联系
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 }
网友评论