鍍金池/ 問答/HTML/ vue中 實(shí)現(xiàn)對(duì)象的深拷貝

vue中 實(shí)現(xiàn)對(duì)象的深拷貝

自己定義了一個(gè)對(duì)象,因該對(duì)象要做雙向數(shù)據(jù)綁定操作,因開發(fā)需要所以要備份一下該對(duì)象的初始狀態(tài),但是普通的備份對(duì)象無效仍然會(huì)因雙向數(shù)據(jù)綁定而導(dǎo)致備份對(duì)象跟著改變,請(qǐng)教如何用深拷貝備份初始對(duì)象。

回答
編輯回答
愿如初

一般用 JSON.parse(JSON.stringify(data)) 就可以了。如果你要使用這種方式,有幾個(gè) 注意事項(xiàng) 需要了解下

2018年6月14日 15:16
編輯回答
嘟尛嘴

可以用lodash的cloneDeep函數(shù)。

狠一點(diǎn)就上immutable,facebook官方出的,所有數(shù)據(jù)都是不可變,不需要深拷貝之類的操作

2018年3月7日 16:19
編輯回答
野橘

純數(shù)據(jù)對(duì)象的話可以用JSON的接口,

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

如果是帶有function的js對(duì)象的話,那就。。。復(fù)雜點(diǎn),寫個(gè)克隆吧

2018年7月12日 20:25
編輯回答
嫑吢丕
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;
   }
2018年7月13日 18:46