项目遇到需要深拷贝echarts配置项的问题,echarts配置项对象里有数组、对象、函数,为了方便的拷贝配置项可使用如下方法:
methods:{
copy(obj) {
let target = {};
function isRef(obj) {
return Object.prototype.toString.call(obj).toLowerCase()==="[object object]"||Object.prototype.toString.call(obj).toLowerCase()==="[object array]"
}
function _copy(obj,hash = new WeakMap()) {
let cloneObj;
let Constructor = obj.constructor;
if(hash.has(obj)) return hash.get(obj);
cloneObj = new Constructor();
hash.set(obj, cloneObj);
for (let key in obj) {
//obj[key]为函数时,isRef(obj[key])返回 false,将函数地址直接赋值给cloneObj[key]
cloneObj[key] = isRef(obj[key]) ? _copy(obj[key], hash) : obj[key];
}
return cloneObj;
}
target = _copy(obj);
return target;
},
}
使用
this.chartOption$1=this.copy(this.chartOption);