vue對象的深度克隆方式
vue對象的深度克隆
方法1
通過js序列化,將js轉(zhuǎn)換成字符串,然后再將字符串轉(zhuǎn)換成js對象
var olbObj = {a:1}; var str = JSON.stringify(obj); //序列化對象 var newobj = JSON.parse(str); //還原 //相當于 var newObj = JSON.parse(JSON.stringify(olbObj ))
方法2
ES6語法對象展開運算符進行對象的展開賦值
var a = {a:0} var b = {...a}
方法3
進行對象的遍歷復(fù)制,對 對象的每一條屬性進行復(fù)制,這樣就能進行對象的深度克隆
function newobj(obj) { ? var str, newobj = obj.constructor === Array ? [] : {}; ? //constructor 屬性返回對創(chuàng)建此對象的數(shù)組函數(shù)的引用。創(chuàng)建相同類型的空數(shù)據(jù) ? if (typeof obj !== 'object') { ? ? return; ? } else { ? ? for (var i in obj) { ? ? ? if (typeof obj[i] === 'object'){//判斷對象的這條屬性是否為對象 ? ? ? ? newobj[i] = newObj(obj[i]);//若是對象進行嵌套調(diào)用 ? ? ? }else{ ? ? ? ? newobj[i] = obj[i]; ? ? ? } ? ? } ? } ? return newobj;//返回深度克隆后的對象 }
vue克隆對象時遇到的問題
我們知道 當我們需要深克隆一個對象 或者數(shù)組時 改變這個得到的數(shù)據(jù),原數(shù)據(jù)保持不變 比較簡單的用到的函數(shù)基本都是
let b = JSON.parse(JSON.stringify(a))
但是假如我們克隆一個vue響應(yīng)式對象時 發(fā)現(xiàn)用這個方法沒啥用
所以需要一個工具函數(shù)老深克隆
//深克隆? export const deepClone = (source) => { ? var sourceCopy = source instanceof Array ? [] : {} ? for (var item in source) { ? ? sourceCopy[item] = typeof source[item] === 'object' ? deepClone(source[item]) : source[item] ? } ? return sourceCopy } let b = deepClone (a)
這樣就得到響應(yīng)式的啦
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue限制輸入數(shù)字或者保留兩位小數(shù)實現(xiàn)
這篇文章主要為大家介紹了vue限制輸入數(shù)字或者保留兩位小數(shù)實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07vue防止花括號{{}}閃爍v-text和v-html、v-cloak用法示例
這篇文章主要介紹了vue防止花括號{{}}閃爍v-text和v-html、v-cloak用法,結(jié)合實例形式分析了vue.js使用v-text和v-html、v-cloak防止花括號{{}}閃爍的解決方法,需要的朋友可以參考下2019-03-03vue-cli3項目升級到vue-cli4 的方法總結(jié)
這篇文章主要介紹了vue-cli3項目升級到vue-cli4 的方法總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2020-03-03使用開源Cesium+Vue實現(xiàn)傾斜攝影三維展示功能
這篇文章主要介紹了使用開源Cesium+Vue實現(xiàn)傾斜攝影三維展示,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07vue作用域插槽詳解、slot、v-slot、slot-scope
這篇文章主要介紹了vue作用域插槽詳解、slot、v-slot、slot-scope,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03