判斷物件邏輯
陣列物件處理
迴圈物件處理
棧溢位的問題
// 工具函式
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 ...