javascript - 通过嵌套对象 JavaScript 计时递归迭代

标签 javascript object recursion iteration for-in-loop

我有一个具有以下结构的对象。

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)。

我有一个递归函数来搜索 content整个obj的数组如下:

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" 中搜索元素数组任何嵌套对象。我的问题是 - 我如何识别 最后for...in父对象的循环obj同时递归循环它? (记录完成时间)有没有更好的计时方法 执行这样的函数?

我尝试过推迟 for loop 的时间完成 "contents" 的循环数组(对于每个嵌套对象)到全局 execTime数组,然后使用 setTimeout搜索函数之外的函数来获取 max 之间的差异和min execTime 中的值因为我不确定递归搜索函数何时停止执行。

最佳答案

@VLAZ 的评论被证明非常有用:我已经决定使用以下内容来运行基准测试(仍然没有弄清楚 一个*代码内解决方案,但这可以完成工作)

console.time("recursion"); 
search(obj); 
console.timeEnd("recursion");

这是一个工作demo

关于javascript - 通过嵌套对象 JavaScript 计时递归迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59619378/

相关文章:

C++递归地生成集合的排列

php - PHP 中的 JS 警报作为 AJAX 应用程序的一部分

javascript - 为什么 jquery 日期选择器插件不起作用

sql-server - SQL Server 中的家谱树

javascript - 使用 Lodash 测试空属性

javascript - 如何获取调用哪个函数的对象?

c++ - 递归 boolean lambda C++

javascript - 我们是否正在倒退使用 JavaScript MVC (MVVM) 框架,如 Backbone.js、Angular 等?

javascript - 是否可以为 Node.JS 对象创建 "before writing"代理?

javascript - 基于 ids 数组有效循环对象