Creé una función que pasa una cadena y un carácter. La cadena es saturday y el carácter es a .
Quiero que el resultado sea una matriz que contenga todos los números de índice donde se encuentra la letra 'a' en saturday .
Luego, la matriz termina con solo [1] . Entonces encuentra el primero sentado a el segundo índice. Probé esto cambiando el saturday por el soturday y la consola imprime la matriz con [6] .
Quiero que el resultado sea [1, 6]
Intenté poner el resultado devuelto fuera del siguiente conjunto de llaves {} pero no me gustó.
const subLength = (str, cha) => { let result = []; for (let i = 0; i < str.length; i++) { if (str.charAt(i) === cha) { result.push(str.indexOf(cha)); return result; } } }; console.log(subLength('Saturday', 'a'));2 pequeños problemas con tu código
La declaración de retorno está en el bucle for. La primera vez que el ciclo golpea, su ciclo se detendrá y la función regresará. Es por eso que solo obtiene 1 resultado. Mueve el return fuera del bucle.
Una vez que se solucione lo anterior, se dará cuenta de que su matriz ahora devolverá [1, 1] . Esto se debe a que str.indexOf(cha) siempre devolverá 1 ya que devuelve el índice de la primera a . Para solucionar esto, debe agregar el índice i a su matriz, ya que representa el índice del carácter actual.
const subLength = (str, cha) => { let result = []; for (let i = 0; i < str.length; i++) { if (str.charAt(i) === cha) { result.push(i); } } return result; }; console.log(subLength('Saturday', 'a'));¿Qué hay de poner el return result; fuera del bucle for?
Algo como esto debería funcionar, si distingue entre mayúsculas y minúsculas
const subLength = (str, cha) => { const chaArr = str.split(''); const result = []; chaArr.forEach((v, i) => { if (v === cha) result.push(i); }) return result }; console.log(subLength('Saturday', 'a'));