Gostaria de deixar a minha resolução dos desafios, e comentar que acredito que o desafio 3, de verificar se palavra ou frase é um palíndromo, me parece complexo demais para o nível de conhecimento passado pelas aulas até o momento.
Desafio 1: é bem simples, basta adicionar um confirm
dentro de uma condicional. Decidi utilizar um return
para interromper a execução do código caso não o usuário clique em "não".
// Confirma se o jogo deve ser mesmo devolvido
if (imagemDoGame.classList.contains('dashboard__item__img--rented')) {
if (!confirm(`Tem certeza que deseja devolver ${nomeDoJogo}?`)) {
return;
}
}
Desafio 2: não ficou claro se o intuito era incrementar um contador ou contar quantos jogos dentre os disponíveis foram alugados, decidi fazer da segunda forma:
function jogosAlugados() {
let jogosAlugados = 0;
const listaJogos = document.querySelectorAll('.dashboard__items__item');
for (const jogo of listaJogos) {
if (jogo.querySelector('.dashboard__item__img').classList.contains('dashboard__item__img--rented')) {
jogosAlugados++;
}
}
console.log(`Jogos alugados: ${jogosAlugados}`);
}
Desafio 3: utilizei um filtro usando Regex para deixar apenas caracteres alfanuméricos, e, por sorte, verifiquei que esse filtro também removeu acentos. A verificação foi feita caractere a caractere, utilizando um loop for. Também fiz validações caso não fosse digitado nada, e caso o filtro resultasse em uma string vazia, e adicionei um confirm
para permitir reiniciar a execução.
verificarPalindromo();
function verificarPalindromo() {
const string = prompt('Digite uma palavra ou frase para verificar se ela é um palíndromo');
let palindromo = true;
// Verifica se uma palavra foi digitada
if (string !== null && string !== '') {
const stringFiltrada = string.toLowerCase().replace(/[^a-z0-9]/g, '');
const tamanho = stringFiltrada.length;
if (tamanho) {
for (let i = 0; i < tamanho; i++) {
if (stringFiltrada[i] !== stringFiltrada[tamanho - 1 - i]) {
palindromo = false;
break;
}
}
} else {
palindromo = false;
}
alert(`"${string}" ${palindromo ? 'é' : 'não é'} um palíndromo.`);
} else {
alert('Nenhuma palavra foi digitada')
}
const reiniciar = confirm('Deseja verificar uma nova palavra?');
if (reiniciar) verificarPalindromo();
}
Desafio 4: utilizei um loop while
para validar se o valor digitado era mesmo um número válido, utilizando o fato de que parseInt
retorna NaN
caso ele não consiga transformar o valor em número
escolher();
function escolher() {
alert('Escolha 3 números');
const num1 = verificar('Primeiro número:');
const num2 = verificar('Segundo número:');
const num3 = verificar('Terceiro número:');
// Converte array em string, e adiciona espaço entre os itens
const numerosOrdenados = ordenar(num1, num2, num3).toString().replaceAll(',', ', ');
alert(`Números ordenados: ${numerosOrdenados}`);
// Reinicia se o usuário desejar
if (confirm('Deseja executar novamente?')) escolher();
}
// Verifica se o valor digitado é um número válido e o retorna, caso contrário repete a escolha do número
function verificar(msg) {
let numero = prompt(msg);
numero = parseFloat(numero?.replace(',', '.'));
while(Number.isNaN(parseInt(numero))) {
alert('O valor digitado não é um número válido');
numero = prompt(msg);
numero = parseFloat(numero?.replace(',', '.'));
}
return numero;
}
// Retorna array com números ordenados
function ordenar(num1, num2, num3) {
return [num1, num2, num3].sort();
};