2

Hey, also ich habe gesucht und es gab möglicherweise (??) einige Antworten auf diese, aber sie sind alle über meinen Kopf. Im Grunde spiele ich mit einer theoretischen Tabelle auf der Grundlage dieser Dynamically generated table - using an array to fill in TD values ; Aber ich wollte Objekte verwenden, anstatt nur Arrays:Arrays als Schlüssel für Objekte in Javascript

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

Ich kann eine Tabelle erzeugen, wenn ich zum Beispiel einen Schlüssel nennen explizit wie:

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

aber das macht nur jede Zeile die Adresse. Ich versuche, es dynamischer zu machen, also ist die nächste Reihe das Telefon. Aber wenn ich versuche:

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

erhalte ich die Fehlermeldung: "table.js: 43 Uncaught Typeerror: kann nicht lesen Eigenschaft '1' undefined"

obwohl property[i] gibt eine Zeichenfolge die ist identisch mit der expliziten Eigenschaft, die ich eintippe. Könnte jemand bitte darauf hinweisen, wo ich vielleicht falsch liege?

Vielen Dank im Voraus. Ich habe Schwierigkeiten, den html auch einzusetzen, also läuft es die addTable Funktion in einem Div mit id "samtable" im Grunde laufen. js wird vor Kopf als table.js geladen. Nochmals vielen Dank

Antwort

2

Hier scheint für Sie Schleife ein bisschen falsch, hier, wenn Sie einen Schlüssel des Objekts erhalten, gibt es es als Zeichenfolge zurück, um Eigenschaft des Objekts zu erhalten, müssen Sie eckige Klammern verwenden, dh Objekt ['Schlüssel'] oder Objekt [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); 
} 
+1

oh wow das war schnell, und ja, es hat funktioniert. OK, das erklärt es perfekt, ich dachte, es wäre etwas komplizierter, aber es war einfach ein Syntaxfehler. Vielen Dank für deine Hilfe! –

+0

Cheeers !!! Happy to help :) –

+0

Meine nächste Stufe im Lernen wird es sein, zu sehen, ob ich diese Objekte jetzt mit einer mySQL-Datenbank verbinden und die Tabelle dynamisch füllen kann. Ich sehe voraus, dass viele eine Google-Suche in meiner Zukunft :) –

Verwandte Themen