2014-10-11 50 views
0

这里遇到了一个小问题。 我想创建一个函数,显示多个对象的内容。 因此,我创建了下面的代码和它的作品,但由于某种原因它停止的第一对象之后,我只是为什么发生这种情况没有得到它:/显示多个对象的内容?

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

回答

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); 
+0

大,正是我一直在寻找!马丁恩斯特,谢谢你:) – Scdev 2014-10-11 13:03:42

1

让你的变量indexArgumentindexObject地方像所以:

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

    for (var indexObject in arguments[indexArgument]) { 

     /* your code */ 

    } 
}