2016-05-11 2 views
3

У меня есть следующие функции, что я хочу сделать более общий характер:Как динамически создавать имена параметров

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

Я попробовал следующий подход:

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

Однако вместо значений rowData.param1 ... 3 печатает "rowData.param1", "rowData.param1" и "rowData.param1".

ответ

8

Вы можете использовать кронштейн нотацию для доступа к свойствам объекта по имени строки, как это:

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

В качестве примечания, вы создаете новый массив каждую итерацию и хранение имени свойства в качестве i го элемента этого массива. Вы могли бы более просто использовать переменную:

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

или единственный лайнер:

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

Вы можете использовать $.each, чтобы получить все свойства от RAWDATA, таким образом, вы не должны полагаться на param1, param2 и использовать значения свойств объекта.

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

Что такое 'r' в этом контексте? –

+0

Неплохая идея, если вы хотите перебирать ключи в определенном порядке. Может быть хорошо, если заказ не имеет значения. –

-1

Почему вы создаете массив? Невозможно упростить код:

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

Я думаю, что дело в том, чтобы печатать данные в 'param [1,2,3]' и не печатать это. –

+0

Нет. Если вы посмотрите на исходный код, каждая итерация цикла повторно создает массив. Теперь я вижу, что он пытается получить данные из rowData. Так что действительно $ ('' + rowData ['param' + i] + '') - это то, что он хочет. Все еще нет оснований для создания массива. –

+0

Если это действительно то, что он хотел ... код, который он написал, точно делает, и вопрос здесь не понадобится. –

Смежные вопросы