前端拷貝問題

2021-09-29 16:04:11 字數 2257 閱讀 5137

型別

深拷貝: 值的完全拷貝

淺拷貝實現

深拷貝實現

//物件深拷貝

function

deepclone

(origin,target)

,//判斷是否為引用資料型別

tostr = object.prototype.tostring,

arrtype=

'[object array]'

;for

(let key in origin)

else;}

deepclone

(origin[key]

,tar[key]);

}else}}

return tar;

}

immutable.js 【 效能最好的 】

const _ = require( 『loadsh』 )

const state = ,

arr: [1,2,3 ]

}const newstate = _.clonedeep( state ) // 這種方式逐層遞迴,要遍歷每乙個節點,是很消耗效能的

newstate.str = 「路過的假面騎士mmr」

newstate.obj.x = 1000

newstate.arr[ 0 ] = 2000

console.log( state )

const = require(『immutable』)

/* map作用就是可以幫助我們建立乙個 immutable 物件 */

var obj = // state.name

const state = map(

})/* 每一次的改變都會生成新的immutable物件 */

const newstate = state.set(『age』, 20 ) // 新的immutable物件

// console.log( state === newstate ) false

// console.log( state.get(『name』) )

// console.log( newstate.get(『name』) )

const state2 = newstate.set(『name』,『路過的假面騎士mmr』)

console.log( newstate.get(『name』) )

console.log( state.get(『name』) )

console.log( state2.get(『name』) )

console.log( map.ismap( state2 ))

console.log( map.ismap( obj ))

const = require( 『immutable』 )

const arr = list([ 1,2,3,4 ]) // immutable陣列

const newarr = arr.push( 5 ) // 通過陣列的方法來生成新的immutable陣列

console.log( arr.get[ 0 ] ) // undefined

console.log( newarr.get[ 4 ] ) // undefined

console.log( arr.get( 0 ) ) // 1

console.log( newarr.get( 4 ) ) // 5

console.log( arr.size ); // 4 size輸出的是immutable陣列長度

console.log( newarr.size ); // 5

const = require(『immutable』)

const state1 = map()

const state2 = map()

console.log( is( state1,state2 ) )

const arr = list([1, 『a』, true,null, undefined])

const arr2 = list([1, 『a』, true,null, undefined])

console.log( is( arr,arr2 ) )

// var arr = [ 1, 『a』, true,null, undefined ]

// var arr2 = [ 1, 『a』, true,null, undefined ]

// console.log( arr.sort().tostring() === arr2.sort().tostring() )

前端深拷貝與淺拷貝

前端深拷貝與淺拷貝 1.淺拷貝 var obj1 var obj2 obj1 obj2.a 5 console.log obj1.a 5 console.log obj2.a 52.深拷貝 只能拷貝一層 var obj1 var obj2 object.assign obj1 obj2.c 1 5 ...

前端 js 深淺拷貝

我們了解到物件 引用 型別在賦值的過程中其實是複製了位址,從而會導致改變了一方其他也都被改變的情況。通常在開發中我們不希望出現這樣的問題。let a let b a a.age 2 console.log b.age 2 希望是1let a let b a a.obj.aa 5 console.lo...

前端的深拷貝和淺拷貝 前端面試 深拷貝和淺拷貝

面試題目 如何實現對乙個陣列或物件的淺拷貝和深拷貝?wtf,複製還分兩種,第一次遇到這種問題的時候很是無語呢,先來看看一般的答案的理解。淺拷貝是只拷貝一層,深層次的物件級別就只拷貝引用。深拷貝是拷貝多層,每一級別的資料都拷貝出來。也就是說,基本資料型別其實不存在深淺拷貝的問題,只有物件和陣列才存在深...