【问题标题】:arrays as keys for objects in javascript数组作为javascript中对象的键
【发布时间】:2016-09-06 18:56:56
【问题描述】:

嘿,所以我进行了搜索,可能(??)对此有一些答案,但它们都在我的脑海中。基本上我正在玩基于此Dynamically generated table - using an array to fill in TD values 的理论表 ;但我想使用对象而不仅仅是数组:

function addTable() {
var myTableDiv = document.getElementById("samtable");
var table = document.createElement('TABLE');
var tableBody = document.createElement('TBODY');

table.border = '1';
table.appendChild(tableBody);

var user =  new Array();

user[0] = { Name: "Sam", Address: "good times lane", Phone: "023423423432" }
user[1] = { Name: "Harold", Address: "imaginary ave", Phone: "023447568788" }
user[2] = { Name: "Ronnie", Address: "the pentagon", Phone: "076457574574" }
user[3] = { Name: "Pablo", Address: "antarctica", Phone: "045757432" }
user[4] = { Name: "Shaka", Address: "walmart", Phone: "02345774572" }
user[5] = { Name: "Xianwei", Address: "easy st", Phone: "0242443243432" }

var property = new Array();
property[0] = "Name";
property[1] = "Address";
property[2] = "Phone";

var tr = document.createElement('TR');
tableBody.appendChild(tr);
for (i = 0; i < user.length; i++) {
    var th = document.createElement('TH')
    th.width = '75';
    th.appendChild(document.createTextNode(user[i].Name));
    tr.appendChild(th);
}

 for (i = 1; i < property.length; i++) {
    var tr = document.createElement('TR');
    for (j = 0; j < user.length; j++) {
        var td = document.createElement('TD')
        td.appendChild(document.createTextNode(user[j].property[i]));
        tr.appendChild(td);
    }
    tableBody.appendChild(tr);
 }

 myTableDiv.appendChild(table);
}  

如果我显式调用一个键,我可以生成一个表,例如:

td.appendChild(document.createTextNode(user[j].Address));

但这只是使每一行都成为地址。我试图让它更有活力,所以下一行是电话。 但如果我尝试:

td.appendChild(document.createTextNode(user[j].property[i]));

我收到错误消息:“table.js:43 Uncaught TypeError: Cannot read property '1' of undefined”

即使property[i] 返回的字符串与我键入的显式属性相同。有人可以指出我可能出错的地方吗?

提前致谢。我在粘贴 html 时也遇到了问题,因此它基本上在 id 为“samtable”的 div 中运行 addTable 函数。 js 在 head 作为 table.js 之前加载。再次感谢

【问题讨论】:

    标签: javascript arrays multidimensional-array javascript-objects


    【解决方案1】:

    这里你的for循环似乎有点错误,这里当你得到一个对象的键时,它会以字符串的形式返回它,所以要获取你需要使用方括号的对象的属性,即object['key']或object[keyVariable ]

     for (i = 1; i < property.length; i++) {
        var tr = document.createElement('TR');
        for (j = 0; j < user.length; j++) {
            var td = document.createElement('TD')
            td.appendChild(document.createTextNode(user[j][property[i]]); // This change will do it for you
            tr.appendChild(td);
        }
        tableBody.appendChild(tr);
     }
    

    【讨论】:

    • 哇,这很快,是的,它奏效了。好的很好,完美地澄清了它,我认为它更复杂,但它只是一个语法错误。非常感谢您的帮助!
    • 我的下一个学习阶段将是看看我现在是否可以将这些对象连接到 mySQL 数据库并动态填充表。我预见到我的未来会有很多谷歌搜索:)
    • 嗯,一步一步
    • 它还没有让我接受答案,可能是因为我刚刚注册。我会在一天左右回来检查,希望它会让我。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2022-09-24
    • 2020-12-09
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 2015-05-13
    • 2018-12-22
    • 2021-06-30
    相关资源
    最近更新 更多