Как отсортировать столбец в таблице с номерами версий программного обеспечения?

В моей таблице есть столбцы, которые генерируются динамически. В таблице есть столбцы типа «Имя», «Компания» и т. Д. Также есть столбец, содержащий номера версий (1.14.0.2, 1.12.1.0, 1.8.0.1).

Я использую библиотеку под названием Сортируемый для сортировки на месте. Это отличная библиотека, которая работает только из коробки!

Это хорошо работает для столбцов, таких как имя и компания. Но это не удается для номера версии в некоторых случаях. Я устанавливаю значение данных для результата

str_replace('.','',$version_number)

Но происходит сбой, когда номера версий 1.10.0, 1.14, 1.0.1.2 (особый случай)

Должно сортироваться как

1.0.1.2
1.10.0
1.14

Но это вроде как

1.14
1.0.1.2
1.10.0

Как я могу добиться правильных результатов?

2

Решение

Это происходит так, потому что происходит сортировка по значению данных, которое вы устанавливаете в число без точек.

1.14      --> 114  (smallest)
1.0.1.2   --> 1012
1.10.0    --> 1100 (largest)

Если вы оставите data-value атрибут отсутствует или оставьте точки в номерах версий, он будет отсортирован правильно. Как показано на скрипке ниже.

https://jsfiddle.net/t7xhkkjc/

редактировать

Вам нужно добавить пользовательскую функцию сортировки, чтобы правильно сортировать номера версий

// Credit for function http://stackoverflow.com/a/7717160/769237
var customTypes = [{
name: 'version',
defaultSortDirection: 'descending',
match: function(a) {
return a.match(/([1-9]+\.?)+/g);
},
compare: function (a, b) {
var i, cmp, len, re = /(\.0)+[^\.]*$/;
a = (a + '').replace(re, '').split('.');
b = (b + '').replace(re, '').split('.');
len = Math.min(a.length, b.length);
for( i = 0; i < len; i++ ) {
cmp = parseInt(a[i], 10) - parseInt(b[i], 10);
if( cmp !== 0 ) {
return cmp;
}
}
return a.length - b.length;
}
}];

Чтобы вы не потеряли исходные типы сортировки, переопределив их

var customAndOriginalTypes = Sortable.types.concat(customTypes);

Sortable.setupTypes(customAndOriginalTypes);

Также вам нужно отключить автоинициализацию, удалив data-sortable с вашего стола. Это позволяет добавить новый тип сортировки до добавления функции сортировки в таблицу.

Затем вы можете инициализировать сортировку таблицы

var yourTable = document.querySelector('#your-table');

Sortable.initTable(yourTable);

https://jsfiddle.net/p4w5bup3/

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]