![](/img/trans.png)
[英]recursive function to loop through object and nested object with javascript
[英]Timing a recursive iteration through a nested object JavaScript
我有一個具有以下結構的對象。
var obj = {
"a":{"content": [/*elements*/]},
"b":{
"d":{
"g":{"content":[/*elements*/]},
"h":{
"j":{"content":[/*elements*/]},
"k":{"content":[/*elements*/]}
},
"i":{
"l":{"content":[/*elements*/]}
}
},
"e":{"content":[/*elements*/]},
"f":{"content":[/*elements*/]}
},
"c":{"content":[/*elements*/]},
/* Object goes on with different levels of nesting*/
};
嵌套對象的格式表現出獨特的行為 - 每個嵌套對象要么具有1.一個名為"content"
的屬性,其值為一維元素數組,要么具有2.不同級別的嵌套對象,其屬性最終縮小到 (1 ) 以上。
我有一個遞歸函數來搜索整個 obj 的content
數組,如下所示:
function search(index) {
for(var key in index) {
var current = index[key];
var cLength = Object.keys(current).length;
if(cLength > 1 ) {
search(current);
} else {
if (index[key]["content"] == undefined) {
search(current);
} else {
contentsArray = index[key]["content"];
// Search Contents Array
}
}
}
}
search(obj);
實際的 obj 是一個深度嵌套的對象,具有相當多的數據條目。 我想運行基准測試以獲得在任何嵌套對象的"contents"
數組中搜索元素所需的平均時間。 我的問題是 - 我如何在遞歸循環時識別父對象obj
最后一個for...in
循環? (記錄完成時間)有沒有更好的方法來計時這樣一個函數的執行?
我嘗試將for loop
完成循環遍歷"contents"
數組(對於每個嵌套對象)的時間推送到全局execTime
數組,然后在搜索函數之外使用setTimeout
函數來獲取max
和min
值execTime
因為我不知道什么時候遞歸搜索功能停止執行。
@VLAZ 的評論證明非常有用:我已經決定使用以下內容來運行基准測試(仍然沒有找到 *in-code 解決方案,但這完成了工作)
console.time("recursion");
search(obj);
console.timeEnd("recursion");
這是一個工作演示
您可以讓您的搜索函數返回總執行時間,您可以將其添加到初始search
調用中。
當搜索函數命中return
,這將是您最后一次遞歸調用。 例如,在最后一次調用時, cLength
將為零,這意味着不需要進一步搜索, else
將在之后執行點擊return
這將一直發生到初始search
調用。
您可以在瀏覽器中使用 User Timing API
function doStuff() { // long running } performance.mark('start-token'); doStuff(); performance.mark('end-token'); performance.measure('time', 'start-token', 'end-token'); console.log('time: ', performance.getEntriesByType("measure")[0].duration); performance.clearMarks(); performance.clearMeasures();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.