Analisei detalhadamente o seu código e precisei fazer algumas mudanças. Espero que me desculpe por isso. Vamos lá:
A função listar() é a responsável por colocar os filmes na tela, né?
Você estava dando append no body do documento. Isso dificultaria, e muito, a ação de EXCLUIR elementos da lista. Então, é melhor ter uma div só pra isso, e eu percebi que você já tinha feito esta div. ela atende pelo id listaFilmes.
Então, o que a função deve fazer?
- limpar a lista de filmes (a
div) - limpar o select (é um bom lugar para fazer isso)
- repopular a lista
- repopular o select
Então, o código dela ficou assim:
function listar() {
//Atualiza lista de filmes
const divLista = document.querySelector('#listaFilmes');
var select = document.querySelector("#removeFilmes");
//Limpa o select
for(var i = select.options.length - 1; i >= 0; i--) {
select.remove(i);
}
//limpa a div que vai receber os nomes dos filmes
divLista.innerHTML = '';
for (var i = 0; i < listaDeFilmes.length; i++) {
divLista.innerHTML += "<figure><img src=" + listaDeFilmes[i] + "><figcaption>" + nomeDeFilmes[i] + "</figcaption></figure>";
//Insere uma nova option no select
select.add(new Option(nomeDeFilmes[i],nomeDeFilmes[i]));
}
}
Depois, percebi que você estava duplicando código desnecessariamente na função adicionarFilme(). Ora, se listar() já insere os filmes na tela, por que fazer isso também em outro lugar? Então, eu substituí essa redundância por uma simples chamada a listar(). A função ficou assim (atente para a linha abaixo do comentário "imprime na tela"):
//Função que insere novos filmes no catálogo
function adicionarFilme(filmeFavorito, nomeFilmeFavorito) {
var elementoFilmeFavorito = "<img src=" + filmeFavorito + ">";
var elementoNomeFilmeFavorito = nomeFilmeFavorito;
//Verifica se o filme desejado já não foi inserido
if (
listaDeFilmes.includes(filmeFavorito) ||
nomeDeFilmes.includes(nomeFilmeFavorito)
) {
var mensagem = document.getElementById("mensagem");
mensagem.innerHTML = "Esse filme já está no catálogo.";
document.getElementById("listaFilmes").value = "";
} else {
//Insere nome do filme no select para caso queira remover
var mensagem = document.getElementById("mensagem");
mensagem.innerHTML = "Ok, filme inserido.";
//empurra para o array
listaDeFilmes.push(filmeFavorito);
nomeDeFilmes.push(nomeFilmeFavorito);
//imprime na tela
listar();
document.getElementById("filme").value = "";
document.getElementById("nomeFilme").value = "";
}
}
Por fim, a exclusão de filmes tava com um código meio confuso. Não sei em que nível do curso você está, mas acho que você já sabe tudo o que eu usei. A função ficou assim:
//função para remover filme do catálogo
function removeFilme() {
var elementoRemoveFilme = document.querySelector("#removeFilmes").value;
if (nomeDeFilmes.indexOf(elementoRemoveFilme) > -1) {
var posicao = nomeDeFilmes.indexOf(elementoRemoveFilme)
nomeDeFilmes.splice(posicao, 1);
listaDeFilmes.splice(posicao, 1);
}
listar();
}
Claro que existem milhões de formas diferentes de resolver o mesmo problema (e essa é a graça dessa nossa área!). Esta é só uma delas. Espero ter ajudado.