无法从推送数组中检索对象属性

时间:2016-01-25 10:49:02

标签: javascript arrays object

我在脚本中遇到如下问题:

我的代码

function data (classno) {
    switch (classno) {
       case 0:
         return [
                 {'name' : 'SomeName1', 'age' : 'SomeAge1'},
                 {'name' : 'SomeName2', 'age' : 'SomeAge2'}
         ]
         break;
       case 2:
         return [
                 {'name' : 'SomeName3', 'age' : 'SomeAge3'},
                 {'name' : 'SomeName4', 'age' : 'SomeAge4'}
         ]
    }
}
function add (name, age, classno) {
    var a, b;
    a = {'name' : name, 'age' : age};
    b = data(classno);
    b.push(a);
}
function list (classno) {
    var dt = data(classno),
        body = document.body;
    for (var x=0;x < dt.length;x++) {
         var div = document.createElement('div');
         var div1 = document.createElement('div');
         var tx_name = document.createTextNode(dt[x].name);
         var tx_age = document.createTextNode(dt[x].age);
         div1.appendChild(tx_age);
         div.appendChild(tx_name);
         div.appendChild(div1);
         body.appendChild(div)
    }
}

add('ABC', 12, 0); //Adding User to list...
list(0); //Listing all user in Class number '0'...

但是,我添加的新用户未在列出的用户中显示。

还有其他方法吗?

这是我尝试的JSFiddle

1 个答案:

答案 0 :(得分:3)

data总是返回一个新数组,没有存储此数组的变量,因此您可以更新该数组并获取更新的数据。

检查此更新的bi-directional synchronization以了解如何在不创建变量数组的情况下执行此操作但是您无法通过传递classno来调用列表方法。

但是,请检查此fiddle以了解如何使用变量数组执行此操作,并通过传递classno

仍使用list方法
var obj = {
  0: [
                     {'name' : 'SomeName1', 'age' : 'SomeAge1'},
                     {'name' : 'SomeName2', 'age' : 'SomeAge2'}
             ],
  2: [
                     {'name' : 'SomeName3', 'age' : 'SomeAge3'},
                     {'name' : 'SomeName4', 'age' : 'SomeAge4'}
             ]

}

function data (classno) {
        return obj[ classno ];
    }
    function add (name, age, classno) {
        var a, b;
        a = {'name' : name, 'age' : age};
        b = data(classno);
        b.push(a);
    }
    function list (classno) {
        var dt = data(classno),
            body = document.body;
        for (var x=0;x < dt.length;x++) {
             var div = document.createElement('div');
             var div1 = document.createElement('div');
             var tx_name = document.createTextNode(dt[x].name);
             var tx_age = document.createTextNode(dt[x].age);
             div1.appendChild(tx_age);
             div.appendChild(tx_name);
             div.appendChild(div1);
             body.appendChild(div)
        }
    }

    add('ABC', 12, 0); //Adding User to list...
    list(0); //Listing all user in Class number '0'...