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