如何使用子对象读取对象

时间:2016-11-04 10:57:53

标签: javascript object

我有一个包含多个子对象的对象,我想检索所有元素。 运行以下代码时,我只检索部分元素,直到'age'

 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)

对此的一些帮助将受到高度赞赏。

3 个答案:

答案 0 :(得分:2)

您已使用以下行创建了隐式全局变量:

table=main_table;

错过了var

我还重构了一点,以便在每个递归阶段返回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))




答案 1 :(得分:0)

我建议使用迭代,通过键和递归,对孩子,接近,进行适当的检查

if (object[key] !== null && typeof object[key] === 'object') { //...

表示可迭代对象。

使用的方法:



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




答案 2 :(得分: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);