2016-05-11 15 views
3

Ich habe die folgende Funktion, die ich allgemeinere machen wollen:Wie dynamisch Namen Parameter erstellen

function addRow2(rowData) { 
    var row = $("<tr />") 
    $("#dataTable").append(row); 
    row.append($("<td>" + rowData.param1 + "</td>")); 
    row.append($("<td>" + rowData.param2 + "</td>")); 
    row.append($("<td>" + rowData.param3 + "</td>")); 
} 

Ich habe versucht, den folgenden Ansatz:

function addRow1(rowData) { 
    var row = $("<tr />") 
    $("#dataTable").append(row); 
    for (i = 1; i <= 3; i++) { 
     var marker = []; 
     marker[i] = 'rowData.param'+i; 
     alert(marker[i]); 
     row.append($("<td>" + marker[i] + "</td>")); 
    } 
} 

jedoch anstelle der Werte rowData.param1 ... 3 es druckt "rowData.param1", "rowData.param1" und "rowData.param1".

Antwort

8

Sie Klammer-Notation kann so eine Objekt-Eigenschaft von string name zuzugreifen:

marker[i] = rowData['param' + i]; 

Als Randbemerkung, Sie sind ein neues Array bei jeder Iteration Erstellen und Eigenschaftsnamen als i te Element speichern dieses Arrays. Sie könnten mehr einfach eine Variable verwenden:

for (i = 1; i <= 3; i++) { 
    var marker = rowData['param' + i]; 
    alert(marker); 
    row.append($("<td>" + marker + "</td>")); 
} 

oder ein Einzeiler:

for (i = 1; i <= 3; i++) { 
    row.append($("<td>" + rowData['param' + i] + "</td>")); 
} 
0

Sie $.each können alle Eigenschaften von rawData zu bekommen, so müssen Sie auf nicht verlassen param1, param2 und verwenden Sie sinnvolle Objekteigenschaften.

function addRow2(rowData) { 
    var row = $("<tr />") 
    $("#dataTable").append(row); 
    $.each(rowData, function (prop, value) { 
     row.append($("<td>" + value + "</td>")); 
    }); 
} 
+0

Was ist "R" in diesem Zusammenhang? –

+0

keine gute Idee, wenn Sie in einer bestimmten Reihenfolge über die Schlüssel iterieren möchten. Könnte gut sein, wenn die Reihenfolge keine Rolle spielt. –

-1

Warum erstellen Sie ein Array? Kann Ihr Code nicht vereinfacht werden zu:

function addRow1(rowData) { 
    var row = $("<tr />") 
    $("#dataTable").append(row); 
    for (i = 1; i <= 3; i++) { 
     row.append($("<td>" + rowData['param' + i] + "</td>")); 
    } 
} 
+0

Ich denke, der Punkt ist, die Daten in 'param [1,2,3]' zu drucken und nicht zu drucken. –

+0

Nein - Wenn Sie sich den ursprünglichen Code ansehen, wird bei jeder Iteration der Schleife das Array neu erstellt. Ich sehe jetzt, dass er versucht, die Daten aus den rowData zu bekommen. Also wirklich $ ('' + rowData ['param' + i] + '') ist was er will. Noch immer kein Grund ein Array zu erstellen. –

+0

Wenn das wirklich das ist, was er wollte ... der Code, den er schrieb, tut genau das und die Frage hier wäre nicht nötig. –