Как выполнить цикл через этот своего рода массив javascript?

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

Это могло бы быть проще. Дайте мне знать, если это сработает.