【发布时间】:2020-04-24 10:13:56
【问题描述】:
我有一个具有以下结构的对象。
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" 的属性,其
value 是一维元素数组,或 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 函数得到execTime 中max 和min 值之间的差异,因为我不确定递归搜索函数何时停止执行。
【问题讨论】:
-
除非我遗漏了什么,否则为什么不直接使用
console.time("recursion"); search(obj); console.timeEnd("recursion");?您可以将console.time换成其他方法来获取时间,如果您愿意,但基本上,只需测量对search的初始调用何时开始和结束。 -
@vlaz - 好建议。这是一个工作示例的链接:leetcode.com/playground/dFD5Dgec
标签: javascript object recursion iteration for-in-loop