用深度優先思想和廣度優先思想實現乙個拷貝函式

2021-10-10 19:43:22 字數 1271 閱讀 4918

判斷物件邏輯

陣列物件處理

迴圈物件處理

棧溢位的問題

// 工具函式

let _tostring = object.prototype.tostring

let map =

letgettype

=(item)

=>

letistypeof

=(item, type)

=>

// 判斷是物件還是陣列

function

isobjorarr

(obj)

function

dfsclone

(obj, list =

newweakset()

);// 判斷是否是陣列if(

isobjorarr

(obj));

// 迴圈處理,

if(list.

has(obj)

)else}}

else

// 遞迴完成返回最終的深拷貝物件

return _obj;

}

function

bfsclone

(obj)

;// 引用物件和要拷貝的物件一起傳入,遍歷時引用的均會是該值

list.

push

([obj, resobj]);

};// 廣度優先遍歷

while

(list.length !==0)

// 處理物件if(

isobjorarr

(cobj[key]))

; list.

push

([cobj[key]

, _obj[key]])

;// 記錄處理過的物件

isin.

set(cobj[key]

, _obj[key]);

}else

}// 返回深拷貝物件

return resobj;

}

​ 以上內內容是我在參考各路大神答案,然後再自己總結出來的;

​ 溢棧的情況比較少見,實際很少有那麼深的物件,怕溢棧的話也可以不用深度優先拷貝;

​ 下面是我學習參考內容的**,我覺得蠻詳細的,這裡就不贅述了;

daily-interview-question的第6題

深拷貝的終極探索(99%的人都不知道)

深度優先演算法思想

深度優先演算法思想 深度優先搜尋遍歷類似於樹的先序遍歷。假定給定圖 g的初態是所有頂點均未被訪問過,在 g中任選乙個頂點 i作為遍歷的初始點,則深度優先搜尋遞迴呼叫包含以下操作 1 訪問搜尋到的未被訪問的鄰接點 2 將此頂點的visited陣列元素值置1 3 搜尋該頂點的未被訪問的鄰接點,若該鄰接點...

深度優先和廣度優先

在爬蟲系統中,待抓取url佇列是很重要的一部分,待抓取url佇列中的url以什麼樣的順序排隊列也是乙個很重要的問題,因為這涉及到先抓取哪個頁面,後抓取哪個頁面。而決定這些url排列順序的方法,叫做抓取策略。下面是常用的兩種策略 深度優先 廣度優先 注 scrapy預設採用的是深度優先演算法 這裡是深...

Python深度優先遍歷和廣度優先遍歷實現

class node object 節點類 def init self,elem 1 lchild none rchild none self.elem elem self.lchild lchild self.rchild rchild class tree object 樹類 def init ...