摘要:從這步開始,才是進(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
摘要:解題思路涉及到圖的遍歷無非就是深度優(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...
摘要:算法之深度優(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),...
摘要:劃重點(diǎn),這是一道面試必考題,我靠這道題刷掉了多少面試者嘿嘿首先這是一道非常棒的面試題,可以考察面試者的很多方面,比如基本功,代碼能力,邏輯能力,而且進(jìn)可攻,退可守,針對不同級別的人可以考察不同難度,比如漂亮妹子就出題,要是個帥哥那就得上了, 劃重點(diǎn),這是一道面試必考題,我靠這道題刷掉了多少面試者?(? ? ??)嘿嘿 首先這是一道非常棒的面試題,可以考察面試者的很多方面,比如基本功,代...
摘要:對象的特殊性因為對象的是通過指針仔細(xì)內(nèi)存地址的,所以對象的拷貝不能像變量一般簡單的賦值,對象的賦值只是將指針的地址賦值過去而已,修改屬性值會對所有指向這個內(nèi)存地址的對象的屬性值都會被改變,見下面的例子變量賦值修改不會對造成影響對象賦值修改會 1.對象的特殊性 因為對象的是通過指針仔細(xì)內(nèi)存地址的,所以對象的拷貝不能像變量一般簡單的賦值,對象的賦值只是將指針的地址賦值過去而已,修改屬性值會...
摘要:樹中結(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é)...
閱讀 2066·2021-10-08 10:04
閱讀 3097·2021-09-22 10:02
閱讀 2250·2019-08-30 15:56
閱讀 838·2019-08-30 15:54
閱讀 933·2019-08-30 15:54
閱讀 1290·2019-08-30 15:53
閱讀 2518·2019-08-30 11:21
閱讀 3568·2019-08-30 10:56