如何使用子对象读取对象
How to read objects with sub-objects
我有一个包含多个子对象的对象,我想检索所有元素。当运行以下代码时,我只检索部分元素,直到"年龄">
var output = '';
var main_table = {
animal: 'dog',
color:'black',
age: {
year:2016,
month:11,
day:1
},
race:'sheepdog',
parents: {
father:'Dad',
mother:'Mom'
}
};
function test(main_table){
table=main_table;
for (var name in table) {
if (table.hasOwnProperty(name)) {
if (table[name]=="[object Object]") {
test(table[name]);
}
else {
output+=(name+' : '+table[name]+' ');
}
}
}
alert (output);
}
test(main_table)
如能提供帮助,我们将不胜感激。
您使用以下行创建了一个隐式全局变量:
table=main_table;
通过遗漏CCD_ 1。
我还进行了一些重构,以便在每个递归阶段返回output
,并在最后返回alert
。
var main_table = {
animal: 'dog',
color:'black',
age:
{
year:2016,
month:11,
day:1
},
race:'sheepdog',
parents:
{
father:'Dad',
mother:'Mom'}
};
function test(main_table){
var table=main_table;
var output = '';
for (var name in table)
{
if (table.hasOwnProperty(name))
{
console.log(name, typeof table[name])
if (typeof table[name]== "object")
{
output+=test(table[name]);
}
else
{
output+=(name+' : '+table[name]+' ');
}
}
}
return output;
}
alert(test(main_table))
我建议使用一种迭代的、键上的和递归的、子级的方法,并使用适当的检查
if (object[key] !== null && typeof object[key] === 'object') { //...
用于可迭代对象。
使用的方法:
Object.keys
返回一个具有对象自身属性的数组用于迭代阵列的
Array#forEach
function getElements(object) {
var result = [];
Object.keys(object).forEach(function (key) {
if (object[key] !== null && typeof object[key] === 'object') {
result = result.concat(getElements(object[key]));
return;
}
result.push([key, object[key]]);
});
return result;
}
var main_table = { animal: 'dog', color: 'black', age: { year: 2016, month: 11, day: 1 }, race: 'sheepdog', parents: { father: 'Dad', mother: 'Mom' } };
console.log(getElements(main_table));
.as-console-wrapper { max-height: 100% !important; top: 0; }
你好,由于这行table=main_table;
,您为函数设置了一个错误的范围
我想这个代码可以工作:
var output = '';
var main_table = {
animal: 'dog',
color:'black',
age:
{year:2016,month:11,day:1},
race:'sheepdog',
parents:
{father:'Dad',
mother:'Mom'}
};
function test(table){
for (var name in table)
{
if (table.hasOwnProperty(name))
{
if (table[name]=="[object Object]")
{
test(table[name]);
}
else
{
output+=(name+' : '+table[name]+' ');
}
}
}
alert(output);
}
test(main_table);
相关文章:
- 读取HTML对象标记中的数据
- 使用cookie读取html对象的id
- 使用 Javascript 读取 JSON 对象(错误)
- 在 JQuery 中读取 Java 对象
- 当我不知道密钥的名称时,如何读取 JSON 对象
- 读取 JSON 对象
- 将 JSON 文件读取到对象的全局数组中 - 范围和同步问题
- 仅通过 GET 请求拉取对象的某些部分
- 使用 javascript 从工作目录读取 JSON 对象(无 jQuery)
- Django:从QueryDict读取JSON对象数组
- jQuery cookie插件读取JSON对象
- 如何在原型中读取json对象
- 如何在php中读取FormData对象
- 如何在页面呈现之前从服务器读取Javascript对象
- 读取javascript对象
- Cordova -如何保存和读取JSON对象从本地存储
- 将JS数组转换为JSON对象,但无法在java servlet端读取JSON对象
- 无法读取属性'#<对象>'未定义的获取错误
- JS从本地文件读取JSON对象
- 在PHP返回的JS/JQuery中读取JSON对象