Escriba una función que tome una matriz de letras consecutivas (crecientes) como entrada y que devuelva la letra que falta en la matriz. Siempre faltará exactamente una letra. La matriz siempre contendrá letras en un solo caso. Ejemplo:
["a","b","c","d","f"] -> "e" ["O","Q","R","S"] -> "P"
¿Por qué no funcionan mis funciones?
function findMissingLetter(array) { let alphabetArr = Array.from('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'); let alphabetSlice = alphabetArr.slice(alphabetArr.indexOf(array[0]), alphabetArr.indexOf(array[array.length - 1]) + 1); let missingLetter = alphabetSlice.forEach((e, i) => { if (e !== array[i]) { return e; } }); return missingLetter; } function findMissingLetter(array) { let alphabetArr = Array.from('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'); let alphabetSlice = alphabetArr.slice(alphabetArr.indexOf(array[0]), alphabetArr.indexOf(array[array.length - 1]) + 1); let missingLetter = alphabetSlice.map((e, i) => { if (e !== array[i]) { return e; } })[0]; return missingLetter; }Para buscar un elemento en una matriz, use for loop, así:
for(let i = 0; i < array.length; i++) { if(array[i] !== alphabetSlice[i]) return alphabetSlice[i]; }En este enfoque, buscará la primera diferencia entre dos matrices. Y la diferencia será tu letra faltante :)
La función de map toma datos y los reemplaza con datos "reorganizados". Este:
alphabetSlice.map((e, i) => { if (e !== array[i]) { return e; } }); // for your example will create array creará [undefined, undefined, undefined, undefined, 'e', 'f'] , por lo que el primer elemento es undefined .
undefined ? Porque tiene una declaración de return en if . Entonces, cuando la expresión en if es falsa, no devolverá ningún valor, por lo que el valor no está undefined .
Puede leer más sobre el mapa en mdn .
En realidad, simplemente reemplace forEach con find y cambie lo que está devolviendo, y hará lo que sea necesario.
function findMissingLetter(array) { let alphabetArr = Array.from('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'); let alphabetSlice = alphabetArr.slice(alphabetArr.indexOf(array[0]), alphabetArr.indexOf(array[array.length - 1]) + 1); let missingLetter = alphabetSlice.find((e, i) => e !== array[i]); return missingLetter; } console.log(findMissingLetter(["a","b","c","d","f"])) console.log(findMissingLetter(["O","Q","R","S"]))Array.prototype.forEach() ejecuta una función proporcionada una vez para cada elemento de la matriz.
Array.prototype.find() devuelve el valor del primer elemento de la matriz proporcionada que satisface la función de prueba proporcionada.
No hay forma de regresar de un bucle forEach antes de que itere a través de cada elemento. Y forEach siempre devuelve undefined .
Puede encontrar la letra con const missingLetter = alphabetSlice.find((e, i) => e !== array[i]);