У меня есть данные, которые получают данные из источника ajax, в настоящее время он упорядочен по столбцу 4 по убыванию. Однако у меня есть массив данных, который я бы хотел заказать в таблице, на которой не существует столбца.Datatables 1.10 Заказ по массиву данных
oTable = $('#Table').DataTable({
"scrollX": true,
stateSave: false,
"processing": true,
"serverSide": false,
"ajax": "scripts/SSP_enquiry.php",
select: true,
colReorder: true,
"columnDefs": [
{
"visible": false,
"searchable": false,
"targets": [9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]
},
{className: "word", "targets": [1]}
],
order: [4, 'desc'],
dom: '<"top">lrt<"bottom"pB><"clear">',
responsive: false,
buttons: [
'excel'
]
});
Моя функция, которая использует Moment.JS сделать сравнение между датами в таблице (которые существуют в колонке 4) и дата сегодняшнего. Затем он толкает разницу в днях в массив с именем dArray
.
В моем массиве есть индекс для каждого значения, которое должно относиться к строке в таблице.
Так что я хочу сделать, это использовать индекс и значение для сортировки текущей таблицы на основе значений в dArray
function dateGet() {
var idx = oTable
.columns(4)
.data()
.eq(0);// Reduce the 2D array into a 1D array of data
//console.log(idx);
var dArray = [];
var today = moment();
$.each(idx, function(index,value) {
var tempDate = moment(value);
var deadlineDiff = tempDate.diff(today, 'days');
dArray.push(index,deadlineDiff);
console.log(dArray);
})
}
Пробу dArray
[0, 6]
[1, 0]
[2, -0]
[3, -0]
[4, -1]
[5, -6]
[6, -7]
[7, -7]
[8, -11]
[9, -12]
[10, -12]
[11, -12]
[12, -13]
UPDATE
Я добавил новый столбец, значение которого по умолчанию равно 0, поэтому мне теперь нужно назначить значения ba sed в массиве значений разности сроков. Они должны соответствовать идентификатору соответствующей строки.
result[j][0]
даст мне удостоверение личности в массиве result[j][1]
даст мне значение разности в массиве
function dateGet() {
var dArray = [];
var today = moment();
var ID = oTable
.columns(0)
.data()
.eq(0);
var dDate = oTable
.columns(4)
.data()
.eq(0);// Reduce the 2D array into a 1D array of data
$.each(dDate, function (index, value) {
var tempDate = moment(value);
var deadlineDiff = Math.abs(tempDate.diff(today, 'days'));
dArray.push(deadlineDiff);
});
var result = $.map(ID, function (el, idx) {
return [[el, dArray[idx]]];
});
oTable.rows().every(function (rowIdx, tableLoop, rowLoop) {
var data = this.data();
for (var j = 0; j < result.length; j++) {
if (data[0] == result[j][0]) {
//in here the ID in the table and the ID in the array
// match, I need to iterate through rows and assign the value
//in the array to column 28's cell
}
}
});
}
Как в предположении ... в функции рендеринга для столбца 4 вы можете добавить атрибут данных в диапазон, который содержит вашу дату? А потом заказывайте на этом, а не на самой дате? – annoyingmouse
hmmm, поэтому вы предлагаете, добавляете значения в массив к соответствующему индексу строки/столбца, а затем сортируете атрибут данных. Я понятия не имею, могу ли я это сделать, есть ли у вас пример? –
@annoyingmouse прав, еще лучше - просто верните значение массива, когда 'render()' метод хочет значение 'sort' или' filter'. – davidkonrad