#javascript #jquery #datatable #callback #datatables
#javascript #jquery #datatable #обратный вызов #таблицы данных
Вопрос:
Я пытаюсь суммировать общее количество часов и минут столбца таблицы данных.
У меня этот формат времени в ячейках DT: 4 часа 12 минут
Затем что-то вроде:
4 часа 12 минут 2 часа 8 минут 4 часа 0 минут
Общее количество должно быть:
10 часов 20 минут
Я пытаюсь сделать что-то вроде:
'footerCallback': function ( row, data, start, end, display ) {
var api = this.api(), data;
//Remove the formatting to get integer data for summation
var numVal = function ( i ) {
return typeof i === 'string' ?
parseFloat(i.split("€")[1].split("<")[0].replace(/,/, '.')) :
typeof i === 'number' ?
i : 0;
};
var perTemp = function ( i ) {
// I need some help here...
}
// Total over all pages
totalvar = api
.column( 3 )
.data()
.reduce( function (a, b) {
return numVal(a) numVal(b);
}, 0 );
totaltemp= api
.column( 4 )
.data()
.reduce( function (a, b) {
return perTemp(a) perTemp(b);
}, 0 );
// Update footer
$( api.column( 3 ).footer() ).html('€ ' totalvar);
$( api.column( 4 ).footer() ).html(totaltemp[0] "h" totaltemp[1] "m");
Мне нужна некоторая помощь с функцией «perTemp».
Ответ №1:
var a = ["4h 12m 2h 8m 4h 0m", "4h 12m"];
var s = a.join(","); // "4h 12m 2h 8m 4h 0m,4h 12m"
var re = /([d]*?(h|m))/gmi;
var res = s.match(re); // Array [ "4h", "12m", "2h", "8m", "4h", "0m", "4h", "12m" ]
var hours = res.filter(function(value){
if(value.indexOf("h") > -1){
return true;
}
}).map(function(value){
return parseInt(value.substr(0, value.length-1))
}).reduce(function(pre, cur){
return pre cur
}); // Array [ "4h", "2h", "4h", "4h" ] -> Array [ 4, 2, 4, 4 ] -> 14
var min = res.filter(function(value){
if(value.indexOf("m") > -1){
return true;
}
}).map(function(value){
return parseInt(value.substr(0, value.length-1))
}).reduce(function(pre, cur){
return pre cur
}); // 32
// add hour if > 60 min
hour = Math.floor(min/60);
min = min % 60;
Комментарии:
1. Спасибо, у меня только одна проблема с этим скриптом.
2. Пример: у меня есть (1ч, 2ч, 0ч) и (00м, 00м, 30м), и в результате я получаю: 3ч 3м …. часов в порядке, минут нет.