Acabei fazendo o sorteio de forma diferente, não utilizei o algoritmo pronto. Ao invés disso, meu código gera números aleatório até formar um array com números diferentes. Depois faz a verificação se algum amigo tenha sorteado a si próprio, se sim, realizava o sorteio novamente. Quebrei a cabeça mas esta funcional.
let listaDeAmigos = [];
function adicionar() {
// Verifica se foi informado algum nome.
if (document.getElementById('nome-amigo').value == ''){
alert('Insira um nome.');
return;
}
// Verifica se o nome já foi inserido.
for (i = 0; i < listaDeAmigos.length; i ++) {
if (listaDeAmigos[i] == document.getElementById('nome-amigo').value) {
alert('Esse nome já foi inserido.');
return;
}
}
listaDeAmigos.push(document.getElementById('nome-amigo').value);
document.getElementById('lista-amigos').innerHTML = listaDeAmigos;
document.getElementById('nome-amigo').value = '';
}
function sortear() {
document.getElementById('lista-sorteio').innerHTML = '';
listaSorteados = [];
for (i = 0; i < listaDeAmigos.length; i ++) {
n = Math.floor(Math.random() * (listaDeAmigos.length));
while (listaSorteados.includes(n)) {
n = Math.floor(Math.random() * listaDeAmigos.length);
}
listaSorteados.push(n);
if (listaDeAmigos[i] == listaDeAmigos[listaSorteados[i]]) {
sortear();
return;
}
document.getElementById('lista-sorteio').innerHTML += `${listaDeAmigos[i]} --> ${listaDeAmigos[listaSorteados[i]]}<br>`;
}
}
function reiniciar() {
listaDeAmigos = [];
document.getElementById('lista-amigos').innerHTML = '';
document.getElementById('lista-sorteio').innerHTML = '';
document.getElementById('nome-amigo').value = '';
}