显示多个对象的内容?
问题描述:
这里遇到了一个小问题。 我想创建一个函数,显示多个对象的内容。 因此,我创建了下面的代码和它的作品,但由于某种原因它停止的第一对象之后,我只是为什么发生这种情况没有得到它:/显示多个对象的内容?
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);
答
的问题是,所有变量是全球。
要使indexArgument
和indexObject
本地很容易(在它们前面添加一个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);
答
让你的变量indexArgument
和indexObject
地方像所以:
for(var indexArgument = 0; indexArgument < arguments.length; indexArgument++) {
for (var indexObject in arguments[indexArgument]) {
/* your code */
}
}
大,正是我一直在寻找!马丁恩斯特,谢谢你:) – Scdev 2014-10-11 13:03:42