国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

js小拔高系列——寫一個(gè)深拷貝

wslongchen / 1278人閱讀

摘要:實(shí)現(xiàn)首先可以寫一個(gè)殼子函數(shù),包裹一個(gè)將要反復(fù)遞歸調(diào)用自身的函數(shù)。如果是引用型,將對(duì)應(yīng)的賦值為遞歸拷貝。另外在中需要使用進(jìn)行判斷,因?yàn)槲覀冎幌肟截愖陨淼膶傩浴?/p>

最近想全職當(dāng)碼農(nóng),面試時(shí)候被問到了深拷貝,我噼里啪啦說了一通,感覺很牛逼,問我自己寫過沒有,我說沒有,但是我可以寫。其實(shí)我很心虛,估計(jì)現(xiàn)場寫會(huì)卡殼。。。。。
思路

深拷貝需要迭代拷貝對(duì)象的所有屬性,如果屬性是引用型:Object,則繼續(xù)遞歸迭代。

實(shí)現(xiàn)

首先可以寫一個(gè)殼子函數(shù),包裹一個(gè)將要反復(fù)遞歸調(diào)用自身的函數(shù)。

function deepCopy(obj) {
    const handleDeepCopy = obj=>{
       const clonedObj = obj instanceof Array? []:{}
      return clonedObj
    }
    return handleDeepCopy(obj)
}

clonedObj就是即將克隆返回的新對(duì)象
今后會(huì)這么使用它:let newobj = deepCopy(oldobj)
newobj就是經(jīng)過深拷貝的新對(duì)象,這樣在操作newobj的時(shí)候就不會(huì)對(duì)oldobj產(chǎn)生干擾了

接著完善遞歸拷貝邏輯。

用for in迭代數(shù)組和對(duì)象的屬性。(若不用forin迭代,用foreach代碼會(huì)比較多,數(shù)組和對(duì)象的處理方式會(huì)有所不同)

判斷屬性的類型,是否是引用型。

如果是引用型,將clonedObj對(duì)應(yīng)的property賦值為handleDeepCopy(obj[property])【遞歸拷貝】。

如果不是引用型,直接將clonedObj對(duì)應(yīng)的property賦值為obj[property]。

function deepCopy(obj) {
    const handleDeepCopy = obj=>{
       const clonedObj = obj instanceof Array? []:{}
      // add for in logic here
      for (let keyOrIndex in obj) {
          if(obj[keyOrIndex] instanceof Object) {
              clonedObj[keyOrIndex] = handleDeepCopy(obj[keyOrIndex])
          } else {
              clonedObj[keyOrIndex] = obj[keyOrIndex]
          }
      }
      // for in logic over
      return clonedObj
    }
    return handleDeepCopy(obj)
}

以上邏輯還有疏忽的地方,沒有在開始時(shí)判斷傳進(jìn)的obj究竟是不是一個(gè)引用型,如果不是,就應(yīng)該直接將obj返回。另外在for in中需要使用hasOwnProperty進(jìn)行判斷,因?yàn)槲覀冎幌肟截恛bj自身的屬性。為了節(jié)約篇幅,增加以上邏輯后修改的代碼在:stackblitz

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/98883.html

相關(guān)文章

  • js拔高——一個(gè)reduce

    摘要:緣起最近看油管里面有一個(gè)關(guān)于面試的視頻,里面提到了可能會(huì)讓你寫一寫等函數(shù),于是也來一起小拔高拔高。于是知道我們寫的回調(diào)會(huì)被調(diào)用,并且傳一個(gè)進(jìn)來。其中累加值的初始值是我們傳的,如果我們沒傳,那么累加值的初始值就會(huì)是數(shù)組的第一個(gè)元素。 緣起:最近看油管里面有一個(gè)關(guān)于js面試的視頻,里面提到了可能會(huì)讓你寫一寫reduce等函數(shù),于是也來一起小拔高拔高。 先寫寫map 首先回憶平時(shí)是如何使...

    ASCH 評(píng)論0 收藏0
  • 「讀懂源碼系列4」lodash 是如何實(shí)現(xiàn)拷貝的(下)

    摘要:用于檢測自己是否在自己的原型鏈上如果是函數(shù),則取出該函數(shù)的原型對(duì)象否則,取出對(duì)象的原型對(duì)象其中,的判斷,是為了確定的類型是對(duì)象或數(shù)組。相當(dāng)于,而的構(gòu)造函數(shù)是一個(gè)函數(shù)對(duì)象。 showImg(https://segmentfault.com/img/bVbq2N1?w=640&h=437); 前言 接著上一篇文章 lodash 是如何實(shí)現(xiàn)深拷貝的(上),今天會(huì)繼續(xù)解讀 _.cloneDee...

    zombieda 評(píng)論0 收藏0
  • 前端經(jīng)典文章

    摘要:上周末看這篇文章時(shí),偶有靈光,所以,分享出來給大家一起看看前端面試四月二十家前端面試題分享請(qǐng)各位讀者添加一下作者的微信公眾號(hào),以后有新的文章,將在微信公眾號(hào)直接推送給各位,非常感謝。 前端切圖神器 avocode 有了這個(gè)神器,切圖再也腰不酸,腿不疼了。 這一次,徹底弄懂 JavaScript 執(zhí)行機(jī)制 本文的目的就是要保證你徹底弄懂javascript的執(zhí)行機(jī)制,如果讀完本文還不懂,...

    lowett 評(píng)論0 收藏0
  • JavaScript系列--淺析JavaScript解析賦值、淺拷貝拷貝的區(qū)別

    摘要:它將返回目標(biāo)對(duì)象。有些文章說是深拷貝,其實(shí)這是不正確的。深拷貝相比于淺拷貝速度較慢并且花銷較大。拷貝前后兩個(gè)對(duì)象互不影響。使用深拷貝的場景完全改變變量之后對(duì)沒有任何影響,這就是深拷貝的魔力。 一、賦值(Copy) 賦值是將某一數(shù)值或?qū)ο筚x給某個(gè)變量的過程,分為: 1、基本數(shù)據(jù)類型:賦值,賦值之后兩個(gè)變量互不影響 2、引用數(shù)據(jù)類型:賦址,兩個(gè)變量具有相同的引用,指向同一個(gè)對(duì)象,相互之間有...

    laznrbfe 評(píng)論0 收藏0
  • 前端數(shù)據(jù)扁平化與持久化

    摘要:與持久化工程師花了年時(shí)間打造,與同期出現(xiàn)。有持久化數(shù)據(jù)結(jié)構(gòu),如等,并發(fā)安全。總結(jié)篇幅有限,時(shí)間也比較晚了,關(guān)于前端數(shù)據(jù)的扁平化與持久化處理先講這么多了,有興趣的同學(xué)可以關(guān)注下,后面有時(shí)間會(huì)多整理分享。 (PS: 時(shí)間就像海綿里的水,擠到?jīng)]法擠,只能擠擠睡眠時(shí)間了~ 知識(shí)點(diǎn)還是需要整理的,付出總會(huì)有收獲,tired but fulfilled~) 前言 最近業(yè)務(wù)開發(fā),從零搭建網(wǎng)頁生成器,...

    dreamtecher 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<