1
resposta

ordenar por data

Boa noite, Prof e Colegas! Como eu consigo ordenar os vídeos por data crescente e decrecente?

1 resposta

Olá, Jonathas. Tudo bem?

Eu usei a seguinte abordagem. Primeiro, eu adicionei em cada vídeo no json, uma chave data com os valores formatados no padrão ´ano-mês-dia`.

    {
      "id": 1,
      "titulo": "Conhecendo a linguagem Go | Hipsters.Talks",
      "descricao": "3 mil visualizações",
      "url": "https://www.youtube.com/embed/y8FeZMv37WU",
      "imagem": "https://github.com/MonicaHillman/aluraplay-requisicoes/blob/main/img/logo.png?raw=true",
      "categoria": "Programação",
      "data": "2025-07-15"  /* Nesse padrão */
    },

Depois, no HTML eu adicionei mais dois botões referentes a ordenação:

<a href="#" name="Mais recentes" id="ordenarMaisRecente" class="superior__item">Mais recentes</a>
<a href="#" name="Mais antigos" id="ordenarMaisAntigo" class="superior__item">Mais antigos</a>

Agora no javascript, usei o querySelector para referenciar os botões pelos ids:

const btnOrdenarMaisRecente = document.querySelector("#ordenarMaisRecente");
const btnOrdenarMaisAntigo = document.querySelector("#ordenarMaisAntigo");

É necessário também adicionar o atributo data na estrutura HTML com os valores de cada data dos vídeos:

containerVideos.innerHTML += `
    <li class="videos__item" data="${video.data}"> /* Nessa linha */
        <iframe src="${video.url}" title="${video.titulo}" frameborder="0" allowfullscreen></iframe>
        <div class="descricao-video">
            <img class="img-canal" src="${video.imagem} alt="Logo do Canal">
            <h3 class="titulo-video">${video.titulo}</h3>
            <p class="titulo-canal">${video.descricao}</p>
            <p class="categoria" hidden>${video.categoria}</p>
        </div>
    </li>
`;

E criei a seguinte função:

function ordenarPorData(ordemRecente) {
    const videos = Array.from(document.querySelectorAll(".videos__item"));
    console.log(videos)
    
    const videosOrdenados = videos.sort((a, b) => {
        const dataA = new Date(a.getAttribute('data'));
        const dataB = new Date(b.getAttribute('data'));
        
        if (ordemRecente) {
            return dataB - dataA; 
        } else {
            return dataA - dataB; 
        }
    });
    
  
    const container = document.querySelector(".videos__container");
    container.innerHTML = ''; 
    videosOrdenados.forEach((video) => {
        video.style.display = "block";
        container.appendChild(video);
    });
}

A função ordena os vídeos com base no atributo data de cada elemento. Ela recebe um parâmetro ordemRecente, que se for true, ordena do mais recente para o mais antigo e se for false, do mais antigo para o mais recente.

Primeiro, ela seleciona todos os vídeos com querySelectorAll e converte a NodeList em um array. Em seguida, usa o método sort para comparar as datas, convertidas com new Date(). Após a ordenação, o conteúdo do container é limpo (innerHTML = ''), e os vídeos são reinseridos, garantindo que estejam visíveis (display = "block").

E então, os botões "Mais recentes" e "Mais antigos" chamam a função ordenarPorData com true ou false, respectivamente, para aplicar a ordenação desejada.

btnOrdenarMaisRecente.addEventListener("click", () => ordenarPorData(true)); 
btnOrdenarMaisAntigo.addEventListener("click", () => ordenarPorData(false));

Uma interface de streaming de vídeo exibindo vários vídeos de programação e relacionados à tecnologia com contagens de visualizações e títulos.

Espero ter ajudado!

Siga firme nos seus estudos e conte com o fórum sempre que precisar.

Abraços :)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado