最近遇到一個問題是,給一個數(shù)組做了排序,會改變原數(shù)組的數(shù)值

此問題有兩種解決方式:
方法一:切斷數(shù)據(jù)之間的聯(lián)系
let?_arr?=?JSON.parse(JSON.stringify(_this.statisticsData.useData.useClickNum));?//為了防止改變——Arr從而改變useClickNum,轉變一下,切換數(shù)據(jù)聯(lián)系

方法二:深拷貝
根據(jù)詢問是因為淺拷貝的問題,如下提供淺拷貝和深拷貝的區(qū)別




深拷貝代碼附上:
functiondeepClone(o){
? ? // 判斷如果不是引用類型,直接返回數(shù)據(jù)即可? ? if (typeof o === 'string' || typeof o === 'number' || typeof o === 'boolean' || typeof o === 'undefined') {
? ? ? ? return o
? ? } else if (Array.isArray(o)) { // 如果是數(shù)組,則定義一個新數(shù)組,完成復制后返回? ? ? ? // 注意,這里判斷數(shù)組不能用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 }