成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

20190805-前端筆記-利用DFS廣度優(yōu)先遍歷實現(xiàn)深拷貝

shiweifu / 854人閱讀

摘要:從這步開始,才是進(jìn)行深度賦值進(jìn)一步遍歷每一個屬性,進(jìn)行賦值如果是,就直接以后賦值其他類型,直接賦值

定義一些工具函數(shù)

    let _toString = Object.prototype.toString
    // 類型庫
    let map = {
      array: "Array",
      object: "Object",
      function: "Function",
      string: "String",
      null: "Null",
      undefined: "Undefined",
      boolean: "Boolean",
      number: "Number"
    }

    // 獲取類型
    let getType = item => {
      // console.log(_toString.call(item))
      // [object Number]

      return _toString.call(item).slice(8, -1) // Number
    }
    
    // 判斷類型是否相同
    let isType = (item, type) => map[type] && map[type] === getType(item)
let deepCopy = (obj, protoList = []) => {
      // 首先定義需要被拷貝的對象
      let _obj = {}
      // 判斷對象的類型
      if (isType(obj, "array") || isType(obj, "objest")) {
        //  根據(jù)obj類型,轉(zhuǎn)換_obj的類型
        if (isType(obj, "array")) _obj = []

        //  判斷obj是否在其父屬性列表中包含該屬性
        let index = protoList.indexOf(obj)

        if (~index) {
          // 如果包含該對象,就不能循環(huán)了,直接復(fù)制_obj
          _obj = protoList[index]
        } else {
          // 如果不包含,先將被賦值對象push值屬性列表中,然后進(jìn)行循環(huán)obj的屬性,進(jìn)行賦值。
          protoList.push(obj)
          // 從這步開始,才是進(jìn)行深度賦值
          for (let item in obj) {
            // 進(jìn)一步遍歷每一個屬性,進(jìn)行賦值
            _obj[item] = deepCopy(pbj[item], protoList)
          }
        }
      } else if (isType(obj, "function")) {
        // 如果是function,就直接string以后賦值
        _obj = eval(`(${obj.toString()})`)
      } else {
        // 其他類型,直接賦值
        _obj = obj
      }
      return _obj
    }

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/106405.html

相關(guān)文章

  • LeetCode 133:克隆圖 Clone Graph

    摘要:解題思路涉及到圖的遍歷無非就是深度優(yōu)先搜索廣度優(yōu)先搜索,可以先看前幾日的這篇文章就需要借助隊列實現(xiàn),可以借助棧也可以直接用遞歸實現(xiàn)。 題目: 給定無向連通圖中一個節(jié)點(diǎn)的引用,返回該圖的深拷貝(克?。D中的每個節(jié)點(diǎn)都包含它的值 val(Int) 和其鄰居的列表(list[Node])。 Given a reference of a node in a connected undirec...

    Simon 評論0 收藏0
  • JS算法之優(yōu)先遍歷(DFS)和廣度優(yōu)先遍歷(BFS)

    摘要:算法之深度優(yōu)先遍歷和廣度優(yōu)先遍歷背景在開發(fā)頁面的時候,我們有時候會遇到這種需求在頁面某個節(jié)點(diǎn)中遍歷,找到目標(biāo)節(jié)點(diǎn),我們正常做法是利用選擇器,或者,但在本文,我們從算法的角度去查找節(jié)點(diǎn),同時理解一下深度優(yōu)先遍歷和廣度優(yōu)先遍歷的原理。 JS算法之深度優(yōu)先遍歷(DFS)和廣度優(yōu)先遍歷(BFS) 背景 在開發(fā)頁面的時候,我們有時候會遇到這種需求:在頁面某個dom節(jié)點(diǎn)中遍歷,找到目標(biāo)dom節(jié)點(diǎn),...

    roadtogeek 評論0 收藏0
  • 拷貝的終極探索(99%的人都不知道)

    摘要:劃重點(diǎn),這是一道面試必考題,我靠這道題刷掉了多少面試者嘿嘿首先這是一道非常棒的面試題,可以考察面試者的很多方面,比如基本功,代碼能力,邏輯能力,而且進(jìn)可攻,退可守,針對不同級別的人可以考察不同難度,比如漂亮妹子就出題,要是個帥哥那就得上了, 劃重點(diǎn),這是一道面試必考題,我靠這道題刷掉了多少面試者?(? ? ??)嘿嘿 首先這是一道非常棒的面試題,可以考察面試者的很多方面,比如基本功,代...

    qingshanli1988 評論0 收藏0
  • 淺談JS的淺拷貝拷貝(遞歸和樹遍歷)

    摘要:對象的特殊性因為對象的是通過指針仔細(xì)內(nèi)存地址的,所以對象的拷貝不能像變量一般簡單的賦值,對象的賦值只是將指針的地址賦值過去而已,修改屬性值會對所有指向這個內(nèi)存地址的對象的屬性值都會被改變,見下面的例子變量賦值修改不會對造成影響對象賦值修改會 1.對象的特殊性 因為對象的是通過指針仔細(xì)內(nèi)存地址的,所以對象的拷貝不能像變量一般簡單的賦值,對象的賦值只是將指針的地址賦值過去而已,修改屬性值會...

    cjie 評論0 收藏0
  • js 中二叉樹的遍歷廣度遍歷(遞歸實現(xiàn)與非遞歸實現(xiàn))

    摘要:樹中結(jié)點(diǎn)的最大層次稱為樹的深度或高度。二叉樹有深度遍歷和廣度遍歷,深度遍歷有前序中序和后序三種遍歷方法。二叉樹的前序遍歷可以用來顯示目錄結(jié)構(gòu)等中序遍歷可以實現(xiàn)表達(dá)式樹,在編譯器底層很有用后序遍歷可以用來實現(xiàn)計算目錄內(nèi)的文件及其信息等。 樹的簡介 棧、隊列、鏈表等數(shù)據(jù)結(jié)構(gòu),都是順序數(shù)據(jù)結(jié)構(gòu)。而樹是非順序數(shù)據(jù)結(jié)構(gòu)。樹型結(jié)構(gòu)是一類非常重要的非線性結(jié)構(gòu)。直觀地,樹型結(jié)構(gòu)是以分支關(guān)系定義的層次結(jié)...

    Yuanf 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<