显示多个对象的内容?

时间:2014-10-11 12:07:17

标签: javascript recursion javascript-objects

这里遇到一个小问题。 我正在尝试创建一个向我显示多个对象内容的函数。 因此我创建了以下代码并且它可以工作但是由于某种原因它在第一个对象之后停止,我只是不明白为什么会发生这种情况:/

var space = '-';

function showObjects() {

    for (indexArgument = 0; indexArgument < arguments.length; indexArgument++) {

        for (indexObject in arguments[indexArgument]) {

            console.log(space + indexObject + ' : ' + arguments[indexArgument][indexObject]);

            if ( typeof arguments[indexArgument][indexObject] === 'object') {

                space += '-';
                showObjects( arguments[indexArgument][indexObject] );

            }

        }

    }

}

var object1 = { a : 1, b : 2 , data : { a : 12 } };
var object2 = { a : 6, b : 9 , data : { a : 17 } };

showObjects(object1, object2);

2 个答案:

答案 0 :(得分:1)

将变量indexArgumentindexObject置于本地,如下所示:

for(var indexArgument = 0; indexArgument < arguments.length; indexArgument++) {

    for (var indexObject in arguments[indexArgument]) {

        /* your code */

    }
}

答案 1 :(得分:1)

问题是所有变量都是全局的 要使indexArgumentindexObject本地化很容易(在它们前面添加var) - 但要使代码与space变量一起使用,您必须重新构建代码一点点。

我建议像这样分割“参数”和“递归”逻辑:

function showObjects() {

    // loop through all arguments and call the recursive function
    for (var indexArgument = 0; indexArgument < arguments.length; indexArgument++) {
        // call the recursive function (with a additional space parameter)
        showObject(arguments[indexArgument], '-');
    }

    // the recursive function 
    // (handles only one object, with the local space variable)
    function showObject(object, space) {
        for (var indexObject in object) {
            console.log(space + indexObject + ' : ' + object[indexObject]);
            if ( typeof object[indexObject] === 'object') {
                // recursive call of this function
                showObject( object[indexObject], space + '-' );
            }
        }
    }

}

var object1 = { a : 1, b : 2 , data : { a : 12 } };
var object2 = { a : 6, b : 9 , data : { a : 17 } };

showObjects(object1, object2);