Сортировка по умолчанию в таблицах данных, когда исходные данные представляют собой массив объектов

#javascript #jquery #datatables

#javascript #jquery ( jquery ) #таблицы данных

Вопрос:

https://datatables.net/examples/basic_init/table_sorting.html

 $(document).ready(function() {
    $('#example').DataTable( {
        "order": [[ 3, "desc" ]]
    } );
} );
 

Пример в документации использует массив массивов в качестве источника и определяет порядок путем указания индексов.

Как я могу указать порядок по умолчанию, когда источником является массив объектов.

Я попытался написать это как

         "order": [[ "attribute_name", "desc" ]]
 

но это не работает. Я получаю эту ошибку

Ошибка неперехваченного типа: не удается прочитать свойство ‘aDataSort’ неопределенного

Ответ №1:

Согласно документации, первым параметром функции order (или первой позицией в массиве объекта order в вашем случае) должен быть номер индекса столбца, по которому вы хотите выполнить сортировку.

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

 $(document).ready(function() {
  function findColumn(input) {
    return function(element) {
      return element.sTitle === input;
    }
  }

  var myDataTable = $('#example').DataTable();
  var columnIWant = "Office";
  var indexOfThatColumn = myDataTable.context[0].aoColumns.find(findColumn(columnIWant)).idx;

  myDataTable.order([indexOfThatColumn, "desc"]);
});
 

По общему признанию, это довольно некрасиво (хотя и функционально!), Но с некоторым рефакторингом это может быть достойным решением.

Комментарии:

1. Это выглядит как очень интересное решение! Спасибо. Я думал о создании объекта для сопоставления имен с индексами, но я мог видеть, как сложно будет поддерживать его позже, когда мне нужно что-то изменить.