vue中 实现对象的深拷贝

自己定义了一个对象,因该对象要做双向数据绑定操作,因开发需要所以要备份一下该对象的初始状态,但是普通的备份对象无效仍然会因双向数据绑定而导致备份对象跟着改变,请教如何用深拷贝备份初始对象。

阅读 43.5k
4 个回答
function deepClone(data){
       var type = getType(data);
       var obj;
       if(type === 'array'){
           obj = [];
       } else if(type === 'object'){
           obj = {};
       } else {
           //不再具有下一层次
           return data;
       }
       if(type === 'array'){
           for(var i = 0, len = data.length; i < len; i++){
               obj.push(deepClone(data[i]));
           }
       } else if(type === 'object'){
           for(var key in data){
               obj[key] = deepClone(data[key]);
           }
       }
       return obj;
   }

一般用 JSON.parse(JSON.stringify(data)) 就可以了。如果你要使用这种方式,有几个 注意事项 需要了解下

可以用lodash的cloneDeep函数。

狠一点就上immutable,facebook官方出的,所有数据都是不可变,不需要深拷贝之类的操作

纯数据对象的话可以用JSON的接口,

var obj_snapshot = JSON.parse(JSON.stringify(obj))

如果是带有function的js对象的话,那就。。。复杂点,写个克隆吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏