是否可以以非递归方式遍历JavaScript中的对象?

Cak*_*ler 0 javascript computer-science data-structures

例如,我们有一个JavaScript对象,它可以包含具有任意嵌套深度的其他对象.是否可以遍历此对象的每个元素而不使用递归?

如果没有,那么使用非递归迭代使数据结构遍历的最低要求是什么?

Cak*_*ler 8

正如SLaks在上面写的那样,任何递归都可以用堆栈表示为循环.所以经过一段时间的思考,我想出了下一个解决方案:

var myobj = {
    one: "hello",
    two: "world",
    three: {
        one: 1,
        two: 2,
        three: 4,
        four: {
            one: true,
            two: false
        }
    },
    four: "!"
};

function traverse(obj) {
    var stack = [];

    stack.push(obj);

    while (stack.length) {
        for (var j in stack[0]) {
            if (typeof stack[0][j] === 'object') {
                stack.push(stack[0][j]);
            } else {
                console.log('%s: %s', j, stack[0][j]);
            }
        }
        stack.shift();
    }
}

traverse(myobj);
Run Code Online (Sandbox Code Playgroud)