数组作为 javascript 中对象的键

arrays as keys for objects in javascript

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

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

我可以生成 table 如果我明确调用一个键,例如:

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

但这只会使每一行成为地址。我想让它更动态,所以下一行是 phone。 但如果我尝试:

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

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

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

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

这里你的for循环似乎有点不对,这里当你得到一个对象的键时它returns它作为字符串所以要得到你需要使用方括号的对象的属性,即对象['key'] 或对象[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);
 }