#javascript #arrays #datatables
#javascript #массивы #таблицы данных
Вопрос:
Я возвращаю данные в свою DataTables
таблицу, но я не могу выполнить цикл через приведенный ниже массив:
["BREAKFAST (Vegetables)", "LUNCH-DINNER (Vegetables)"]
Я попробовал приведенный ниже код, но он просто печатает первый элемент
{data: null,
render: function(data, type, row, meta) {
var categoriesNamesList = '';
//loop through all the row details to build output string
for (var item in row.categories_names) {
var r = row.categories_names[item];
//Check if r is NULL or Empty then skip
if(r){
categoriesNamesList = '<ul><li>' r '</li></ul>';
}
}
return categoriesNamesList;
}
}
Комментарии:
1.
categoriesNamesList = '<ul><li>' r '</li></ul>';
— это перезаписывает переменную каждый раз. Вы имеете в виду объединение строк с=
?2. @RobinZigmond да, это была проблема! Мне не хватало массива конкатенации. Мой новый код —
categoriesNamesList = categoriesNamesList '<ul><li>' r '</li></ul>';
и теперь он печатает все записи. Миллион благодарностей, приятель!
Ответ №1:
Переместите расположение возврата внутри цикла. Основываясь на имеющемся у вас коде, я мог бы почти поспорить, что вы получаете только последний элемент.
render: function(data, type, row, meta) {
var categoriesNamesList = '';
//loop through all the row details to build output string
for (var item in row.categories_names) {
var r = row.categories_names[item];
//Check if r is NULL or Empty then skip
if(r){
categoriesNamesList = '<ul><li>' r '</li></ul>';
return categoriesNamesList;
}
}
}
Ответ №2:
На самом деле вы могли бы использовать .map(...)
в массиве (при условии row.categories_names
) следующим образом:
render: function(data, type, row, meta) {
return row.categories_names.map(function(item) {
return '<ul><li>' item '</li></ul>';
});
}
Это могло бы быть проще. Дайте мне знать, если это сработает.