Проблема сортировки табулятора со сгруппированными значениями

Вопрос или проблема

У меня есть данные, сгруппированные по ключу ‘groupname’… когда я сортирую с помощью кнопки заголовка по другому ключу, я хочу сортировать внутри групп, но не хочу, чтобы группы сортировались. Я пробовал несколько способов, таких как повторная сортировка значений по группам в соответствующих событиях (datasorted, datasortin, но ничего не работает …) Есть идеи, как это реализовать?
Мне удалось сделать это в старых версиях вот так

 dataSorted: function (datas, sortList, dir, ctx, activedata) {

   //    console.log(datas);
   if (sortList[0] && sortList[0].field.field != "GroupName") {
     groups = _.groupBy(activedata, 'GroupName');
     groups = _.sortBy(groups, function (grp) {

       return grp[0].GroupName
     });
     var result = [];
     //   var vehics = Object.values(groups);
     var vehics = Object.keys(groups).map(function (e) {
       return groups[e]
     });
     for (var i = 0; i < vehics.length; i++) {
       for (var j = 0; j < vehics[i].length; j++) {
         result.push(vehics[i][j]);
       }
     }
     //     activedata = result;
     //ctx.data = datas;
     ctx.activeData = result;
   }

но не могу реализовать это в новых версиях....

Ответ или решение

Проблема сортировки с использованием Tabulator и группированных значений

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

Понимание структуры данных

Ваши данные сгруппированы по ключу 'GroupName'. Это означает, что каждый элемент имеет соответствующую группу, и вы хотите поддерживать порядок самих групп, сохранив при этом возможность сортировки значений внутри этих групп.

Основные моменты

  1. Подход к сортировке: В новой версии Tabulator структура данных и обработка событий сортировки могли изменяться. Вам необходимо будет адаптировать свой подход к обработке событий сортировки.

  2. Переменная activedata: Убедитесь, что вы правильно используете переменную activedata, которая содержит текущие активные данные перед сортировкой.

  3. Обработка событий сортировки: Использовать событие dataSorted для реорганизации данных после стандартной сортировки Tabulator.

Решение проблемы

Попробуем адаптировать ваш код к новой версии Tabulator. Мы будем переопределять поведение сортировки для элементов внутри групп, не изменяя порядок самих групп.

dataSorted: function(datas, sortList, dir, ctx, activedata) {
    if (sortList[0] && sortList[0].field.field !== "GroupName") {
        // Группировка данных по 'GroupName'
        let groups = _.groupBy(activedata, 'GroupName');

        // Создание массива для результата
        let result = [];

        // Сортировка значений внутри каждой группы
        for (let groupName in groups) {
            let groupItems = groups[groupName];

            // Сортируем элементы внутри группы по выбранному полю
            groupItems = _.sortBy(groupItems, function(item) {
                return item[sortList[0].field.field];
            });

            // Добавляем отсортированные элементы группы в результат
            result = result.concat(groupItems);
        }

        // Обновление активных данных в контексте
        ctx.activeData = result;
    }
}

Объяснение кода

  • Группировка данных: _.groupBy(activedata, 'GroupName') используется для группировки данных по имени группы.
  • Сортировка внутри группы: Мы применяем _.sortBy для сортировки элементов внутри каждой группы на основе выбранного поля.
  • Сборка результата: Каждый отсортированный массив групп добавляется к result.
  • Обновление активных данных: Наконец, мы обновляем ctx.activeData, чтобы отобразить новые отсортированные данные.

Заключение

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

Перед внедрением данного кода убедитесь, что у вас установлены все необходимые библиотеки, такие как lodash, для выполнения операций группировки и сортировки. Если у вас есть дополнительные вопросы или вам нужна помощь с другими аспектами разработки, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...