在做關(guān)鍵詞搜索功能的時(shí)候,需要對(duì)后臺(tái)給出的數(shù)據(jù)進(jìn)行處理,用到了filter過濾器來(lái)篩選對(duì)象中的數(shù)據(jù)。首先在本地準(zhǔn)備兩個(gè)變量,一個(gè)用來(lái)存儲(chǔ)后臺(tái)數(shù)據(jù),一個(gè)用來(lái)過濾篩選。如圖:
關(guān)鍵詞搜索的過程便是對(duì)userList進(jìn)行篩選的過程。注意每次過濾之前都需要令userList=userAllList,防止越篩越少。
但是執(zhí)行的時(shí)候,卻發(fā)現(xiàn)第二次搜索無(wú)法正常實(shí)現(xiàn)。將userList和userAllList都打印了一下,發(fā)現(xiàn)每次搜索,兩個(gè)變量都在被過濾篩選。
這里就需要引出深拷貝和淺拷貝的概念。深拷貝和淺拷貝都只針對(duì)于引用數(shù)據(jù)類型,淺拷貝只復(fù)制指向某個(gè)對(duì)象的指針,而不復(fù)制對(duì)象本身,新舊對(duì)象還是共享同一塊內(nèi)存;深拷貝會(huì)另外創(chuàng)造一個(gè)一模一樣的對(duì)象,新對(duì)象跟原對(duì)象不共享內(nèi)存,修改新對(duì)象不會(huì)改到原對(duì)象。
顯然,我們這里將userAllList賦值給userList的過程只是進(jìn)行了一次淺拷貝,兩個(gè)對(duì)象仍指向同一塊內(nèi)存,一個(gè)被修改了另一個(gè)也會(huì)跟著修改。
要實(shí)現(xiàn)深拷貝,最簡(jiǎn)單的方法就是利用JSON.stringify()與JSON.parse(),通過JSON.stringify把對(duì)象轉(zhuǎn)成字符串,再用JSON.parse把字符串轉(zhuǎn)成一個(gè)全的新的對(duì)象。有關(guān)JSON的內(nèi)容可以點(diǎn)擊此鏈接>>查看。
這樣修改之后便可以成功實(shí)現(xiàn)搜索功能。