tanrax / soy-un-buen-programador-js

Juego con retos sencillos de JavaScript para probarte a ti mismo que sabes lo que haces
11 stars 2 forks source link

Respuesta 5 #22

Open ghost opened 2 years ago

ghost commented 2 years ago

Hola, mi respuesta:

const accentsList = ['à', 'é', 'í', 'ó', 'ú'];

function filterWordByAccents(word, accentsList) {
    const wordArray = Array.from(word.toLowerCase());
    const filteredWordArray = wordArray.filter(function(item, index, arr){
        const isInAccentsList = accentsList.includes(item);
            if (!isInAccentsList) {
                return item;
            }
    });
    return filteredWordArray.join('');
}

console.log(filterWordByAccents('estudió', accentsList));
console.log(filterWordByAccents('ESTUDIÓ', accentsList));
tanrax commented 2 years ago

Gracias por el esfuerzo! Lamento comentarte que no funciona como esperaba. La idea no es quitar las letras con acentos, sino sustituirlos por su equivalencia: estudió --> estudio Filter no es adecuado para esta labor. Y cuidado porque estas quitando las mayusculas. Suerte!

ghost commented 2 years ago

¡Hola @tanrax! ¡Gracias por el comentario! Lamento mucho. Lo siento por mi español.

Tienes razón - he entendido el reto de otra manera. Necesito eliminar las tildes, claro.

Hay un motivo por el que el filter no es bueno aquí. Yo he usado el filter con el map porque necesitamos hacer los cambios dentro del array. Creo que hay unas soluciones más elegantes. He comprobado - el reto está funcionando. Comprueba mi respuesta nueva, por favor:

const accentsList = ['á', 'é', 'í', 'ó', 'ú', 'Á', 'É', 'Í', 'Ó', 'Ú'];
const nonAccentList = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'];

function filterWordByAccents(word, accentsList, nonAccentList) {
    const wordArray = Array.from(word);
    const filteredWordArray = wordArray.filter(function(item, index, arr){
        return item
    }).map(function (item, index, arr) {
        const isInAccentsList = accentsList.includes(item);
        if (isInAccentsList) {
            indexOfAccent = accentsList.indexOf(item);
            return nonAccentList[indexOfAccent];
        } else {
            return item;
        }
    });
    return filteredWordArray.join('');
}

console.log(filterWordByAccents('Buenos días', accentsList, nonAccentList));

console.log(filterWordByAccents('Acento prosódico', accentsList, nonAccentList));
console.log(filterWordByAccents('Acento prosÓdico', accentsList, nonAccentList));

console.log(filterWordByAccents('Acento ortográfico', accentsList, nonAccentList));
console.log(filterWordByAccents('Acento ortogrÁfico', accentsList, nonAccentList));

console.log(filterWordByAccents('Acento diacrítico', accentsList, nonAccentList));
console.log(filterWordByAccents('Acento diacrÍtico', accentsList, nonAccentList));

¡Saludos!

tanrax commented 2 years ago

¡Ahora sí! Fantástico, me gusta mucho 👏👏👏👏 Y has terminado justo a tiempo. Mañana, a por el siguiente reto.

ghost commented 2 years ago

¡Maravilloso, me alegra que te guste mi respuesta! 🤝 Nos mantendremos en contacto.