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

資訊專欄INFORMATION COLUMN

20190805-前端筆記-利用DFS廣度優先遍歷實現深拷貝

shiweifu / 844人閱讀

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

定義一些工具函數

    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")) {
        //  根據obj類型,轉換_obj的類型
        if (isType(obj, "array")) _obj = []

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

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/106405.html

相關文章

  • LeetCode 133:克隆圖 Clone Graph

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

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

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

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

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

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

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

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

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

    Yuanf 評論0 收藏0

發表評論

0條評論

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