我有这些行的文本行
Il Messaggero Roma 22 settembre 2023
Il Messaggero Roma 21 settembre 2023
Il Messaggero 22 settembre 2023
Il Messaggero 21 settembre 2023
Il Messaggero Roma 21 agosto 2023
Il Messaggero Roma 20 agosto 2023
Le Grandi Glorie del Rock – 15 febbraio 2023
Corriere della Sera Sette 26 agosto 2023
我试着用这些名字把它们分组
Il Messaggero Roma [settembre 2023]
Il Messaggero Roma [agosto 2023]
Il Messaggero [settembre 2023]
Le Grandi Glorie del Rock - [febbraio 2023]
Corriere della Sera Sette [agosto 2023]
相反,这些行被错误地分组,包含不正确的内容和名称
settembre [settembre]
agosto [agosto]
febbraio [febbraio]
“Corriere della Sera Sette 25 Agosto 2023
“和“Il Messaggero
“被错误地包含在
settembre [settembre]
agosto [agosto]
但它们必须被视为不同的元素。这张图片显示了错误的分组:
我尝试用这个代码
对文本进行分组的功能,例如Il messaggero 21 settembre 2023
或Le Grandi Glorie del Rock – 15 febbraio 2023
function groupByDate(data) {
var groupedData = {};
data.forEach(function(item) {
var date = item.id.match(/\d{1,2}\s(?:gennaio|febbraio|marzo|aprile|maggio|giugno|luglio|agosto|settembre|ottobre|novembre|dicembre)\s\d{4}/i);
if (date) {
date = date[0].toLowerCase();
if (!groupedData[date]) {
groupedData[date] = [];
}
groupedData[date].push(item);
} else {
if (!groupedData['other']) {
groupedData['other'] = [];
}
groupedData['other'].push(item);
}
});
return groupedData;
}
正则表达式进行匹配
function extractGroup(text) {
var containsNxM = /\d+x\d+/.test(text);
var containsDate = /\d{1,2}\s(?:gennaio|febbraio|marzo|aprile|maggio|giugno|luglio|agosto|settembre|ottobre|novembre|dicembre)\s\d{4}/i.test(text);
if (containsNxM) {
var match = text.match(/^([a-zA-Z\s]+\s\d+x)/);
return match ? match[0] : '';
} else if (containsDate) {
var match = text.match(/\d{1,2}\s([a-zA-Z]+)\s\d{4}/i);
return match ? match[1] : '';
} else {
return text;
}
}
表初始化
function initializeDataTable(data) {
if (dataTable) {
dataTable.destroy();
}
var tableData = [];
if (grouped) {
var groupedData = {};
data.forEach(function(item) {
var groupName = extractGroup(item.id);
if (!groupedData[groupName]) {
groupedData[groupName] = [];
}
groupedData[groupName].push(item);
});
// Inserisci un log per verificare groupedData
console.log("groupedData:", groupedData);
for (var groupName in groupedData) {
if (groupedData.hasOwnProperty(groupName)) {
var groupItems = groupedData[groupName];
var badgeText = groupItems[0].badge;
var badgeClass = 'badge-' + (badgeText || '').toLowerCase();
var commonText = groupName.split('[')[0].trim(); // Estrai la parte comune dal nome
tableData.push({
"checkbox": '<input type="checkbox" class="grouped-checkbox">',
"id": '<span class="badge ' + badgeClass + '">' + badgeText + '</span> ' + commonText + ' [' + groupName + ']', // Cambio qui
"username": groupItems.map(function(item) {
return item.username;
}).join('<br>'),
"extra": '<button class="downloadBtn">Scarica</button>',
"showLinks": groupItems.length > 2
});
}
}
表初始化的完整代码是HERE,但我认为这对于此目的是无用的
2条答案
按热度按时间de90aj5v1#
您的分组键需要保留日期之前的文本部分,并删除日期编号。为此使用regexp替换。
kcwpcxri2#
我以这种方式解决:我为每个单选按钮/徽章创建2个函数
而这
对于表的初始化,