vue 爬坑 之js 物件/陣列 賦值/拷貝 解決VUE中賦值引用後資料雙向改變的問題
阿新 • • 發佈:2018-12-27
淺拷貝這裡就不講了,我們直接講深拷貝
正常的陣列/物件拷貝可以直接用
const cloneObj = JSON.parse(JSON.stringify(Obj));
這種方式可以解決相當多一部分的賦值問題,但是一些特殊屬性除外(undefined/function)
在vue 或者js 中有時需要對一些特殊資料處理,比如VUE中的table等…
這個時候就需要用到第二種方法處理資料
附程式碼:
/** * 深拷貝 * @param source Array/Object 物件/陣列 */ util.deepClone = function (source){ const targetObj = source.constructor === Array ? [] : {}; // 判斷複製的目標是陣列還是物件 for(let keys in source){ // 遍歷目標 if(source.hasOwnProperty(keys)){ if(source[keys] && typeof source[keys] === 'object'){ // 如果值是物件,就遞迴一下 targetObj[keys] = source[keys].constructor === Array ? [] : {}; targetObj[keys] = util.deepClone(source[keys]); }else{ // 如果不是,就直接賦值 targetObj[keys] = source[keys]; } } } return targetObj; };
我這裡是封裝在了工具類裡,單獨引用的小夥伴可自行把 util.
去掉.
這裡是通過遍歷賦值來處理資料的。
如果有更好的方法歡迎一起交流討論.