Ordenar Nombres de archivo, Grupo por ID y Ordenar por Fecha/hora
Tengo la siguiente lista de nombres de archivos y quiero agrupar por el ID y ordenar DESC o ASC por la cadena de fechas también.
He hecho esto en Python usando una función de lambda pero no tengo ni idea de dónde empezar en javascript, ¿alguna ayuda apreciada?
Formato de archivo: {Type}_{ID}_{Descriptor}_{Datetime}.{Extension}
site_732_i_202012120010.xml
site_733_i_202012120010.json
site_723_i_202012140301.xml
site_832_f_202012140301.json
Mi código hasta ahora:
for (var key in data) {
count = 0;
if (data.hasOwnProperty(key)) {
tabs += "Location " + key + " (%%) ";
tabData += "";
tabData += "Pending
";
// Pending Files
for (const [k, v] of Object.entries(data[key]['pending']).sort()) {
tabData += "" + v + "";
count++;
}
tabData += "Archived
";
// Archived Files
for (const [k, v] of Object.entries(data[key]['archived']).sort()) {
tabData += "" + v + "";
}
tabData += "";
tabs = tabs.replace("%%", count);
tabData += "";
}
}
Pregunta hecha hace 3 años, 4 meses, 29 días - Por stackscripter
2 Respuestas:
-
Para ordenar los nombres de archivo por el ID y luego por la fecha/hora en JavaScript, puedes seguir los siguientes pasos:
- Obtener la lista de nombres de archivo.
- Separar el ID y la fecha/hora de cada nombre de archivo.
- Ordenar la lista primero por ID y luego por fecha/hora.
- Mostrar los nombres de archivo ordenados.
Aquí te dejo un ejemplo de cómo podrías lograrlo en JavaScript:
js // Lista de nombres de archivo const fileNames = [ "site_732_i_202012120010.xml", "site_733_i_202012120010.json", "site_723_i_202012140301.xml", "site_832_f_202012140301.json" ]; // Separar ID y fecha/hora y ordenar por ID y luego por fecha/hora const sortedFileNames = fileNames.sort((a, b) => { const idA = a.split('_')[1]; const idB = b.split('_')[1]; if (idA !== idB) { return idA - idB; // Ordenar por ID } else { const dateA = a.split('_')[3].split('.')[0]; const dateB = b.split('_')[3].split('.')[0]; return dateA - dateB; // Ordenar por fecha/hora si los ID son iguales } }); // Mostrar los nombres de archivo ordenados sortedFileNames.forEach(fileName => { console.log(fileName); });
Este código separa cada nombre de archivo por el carácter
_
, luego ordena primero por el ID y luego por la fecha/hora si los ID son iguales. Finalmente, muestra los nombres de archivo ordenados en la consola.Espero que esta solución te ayude a ordenar los nombres de archivo como necesitas en JavaScript. ¡Déjame saber si tienes alguna otra pregunta!
Respondida el Dec 18, 2020 a las 12:43 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
javascript // Obtener los nombres de archivo const archivos = [ "site_732_i_202012120010.xml", "site_733_i_202012120010.json", "site_723_i_202012140301.xml", "site_832_f_202012140301.json", ]; // Agrupar por ID const agrupacionPorId = {}; archivos.forEach((archivo) => { // Obtener el ID del archivo const id = archivo.split("_")[1]; // Si el ID no existe en el objeto de agrupación, crearlo if (!agrupacionPorId[id]) { agrupacionPorId[id] = []; } // Añadir el archivo al grupo agrupacionPorId[id].push(archivo); }); // Ordenar por fecha/hora const ordenarPorFecha = (a, b) => { const aFecha = new Date(a.split("_")[3].replace(".xml", "").replace(".json", "")); const bFecha = new Date(b.split("_")[3].replace(".xml", "").replace(".json", "")); return aFecha - bFecha; }; // Ordenar cada grupo por fecha/hora for (const id in agrupacionPorId) { agrupacionPorId[id].sort(ordenarPorFecha); } // Imprimir el resultado agrupado y ordenado console.log(agrupacionPorId);
Respondida el Dec 18, 2020 a las 12:54 - por Gemini
Votos positivos: 0 | Votos negativos: 0