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

#javascript #reactjs #react-table

#javascript #reactjs #react-таблица

Вопрос:

         Header: "Votes",
        accessor: "Voter",
        filterable: false,
        Cell: row => <Voter id={row.index} vote={this.filterCount(row.index)} />,
        sortMethod: null //sort based on vote prop passed above ^
  

Я хочу, чтобы моя таблица сортировалась на основе наибольшего значения свойства, которое я передаю компоненту избирателя в ячейке. За исключением того, что любое значение, которое я передаю sortMethod , обращается к данным из моего файла JSON, но мне нужно использовать данные, которые я извлек, извлеченные в компоненте. Есть ли способ? Любая помощь очень ценится

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

1. читателям было бы понятнее, если бы вы могли предоставить больше информации, например, какую библиотеку вы используете для отображения таблицы. И что вы пробовали до сих пор?

Ответ №1:

Предполагая, что вы используете react-table (который вы добавили в качестве тега), методу сортировки может быть присвоена функция, которая принимает 2 значения в качестве аргументов):

 sortMethod: (a, b) => {
            a = (a === null || a === undefined || a === '') ? -Infinity : a;
            b = (b === null || b === undefined || b === '') ? -Infinity : b;

            a = parseInt(a);
            b = parseInt(b);
            if (a === b) {
              return 0;
            }
            return a > b ? 1 : -1;
          }
  

Метод сортировки должен работать так же, как обычные методы сортировки, используемые типами javascript. Это очень простой метод сортировки, который просто идет по целочисленному значению и сортирует a выше b, если оно больше, и обрабатывает любые крайние случаи неопределенных переменных, перемещая их в самый низ.

Это немного абстрактно, этого достаточно, чтобы указать, как отсортировать 2 элемента, которые он будет применять ко всем строкам. Значения не обязательно называть A и B , это просто проще. A и B оба представляют 2 значения ячейки. ЕСЛИ значение вашей ячейки является объектом, а не целым числом, то A и B также являются объектами, и вы должны использовать значение, которое хотите сравнить. Например, если значения вашей ячейки являются объектами, и вы хотите выполнить сортировку на основе voter_id, вы должны сделать:

 return a.voter_id > b.voter_id ? 1 : -1;
  

вместо

 return a > b ? 1 : -1;
  

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

1. спасибо за ответ. Это полезно. Но мне все еще интересно, как я могу извлечь данные, которые являются внешними по отношению к столбцу. Например, я хотел бы использовать row.index в моей функции сортировки. Есть ли способ это сделать?

2. метод сортировки просто расширяет собственную функцию Array.sort(), поэтому он может использовать только (значение 1, значение 2, desc) в качестве аргументов. Если ячейка создана из вашего пользовательского компонента Voter, , то у нее есть доступ к этому объекту при сортировке. Итак, если компонент Voter имеет идентификатор (который в вашем примере кода вы установили в row.index), использование a.id будет row.index