function fMI(num,arr){ let digit = arr.toString().split(''); let realDigit = digit.map(Number); console.log("Is RealDigit an array: ",Array.isArray(realDigit)); console.log(realDigit.filter((v,i,a) => (v==num)? i:'')); } fMI(1,[1, 11, 34, 52, 61]);// Cree una función que tome un número y una matriz de números como parámetro // y devuelva los índices de los números de la matriz que contienen el número dado // o devuelva una lista vacía (si el número no es parte de ningún de los números en la matriz)
Salida de muestra: // console.log(findMatchingIndexes(1, [1, 11, 34, 52, 61])); // debe imprimir: [0, 1, 4]
Estoy luchando por devolver los índices de los valores de una matriz. El código que he escrito hasta ahora toma un número y lo compara con la matriz que toma la función. Ahora, estoy en la fase en la que quiero devolver los índices donde los valores de la matriz son iguales al número tomado por la función para comparación.
¿Cómo puedo hacer que esto funcione? Porque después del método de filtro, obtengo solo 3 veces el número 1, lo cual no es correcto.
function fMI(num:number,arr:number[]){ let digit = arr.toString().split(''); let realDigit = digit.map(Number); console.log("Is RealDigit an array: ",Array.isArray(realDigit)); console.log(realDigit.filter((v,i,a) => (v==num)? i:'')); } fMI(1,[1, 11, 34, 52, 61]);Puedes usar un bucle for tradicional:
function fMI(num, arr) { let result = []; let numArr = arr.map(item => Number(item)); for (var i = 0; i < numArr.length; i++) { if (numArr[i] == num) { result.push(i); } } console.log(result); } fMI(1, [1, 11, 34, 52, 61]); Puede usar el método de cadena includes así:
function fMI(num: number, arr: number[]) { const indexes: number[] = []; arr.forEach((value, index) => { if (value.toString().includes(num.toString())) { indexes.push(index); } }) return indexes; } fMI(1, [1, 11, 34, 52, 61]); // [0, 1, 4] Puede usar forEach con un segundo argumento que es el índice del elemento. Tenga en cuenta que está especificando arr como una matriz de números, por lo que no es necesario volver a convertirlos en números.
function fMI(num: number, arr: number[]) { const indexes: number[] = []; arr.forEach((value, index) => { if (value === num) { indexes.push(index); } }) return indexes; }Las 4 líneas que ha escrito no ayudan con la lógica, por eso lo eliminé. Si quieres saber por qué, deja un comentario en esta respuesta y responderé tus preguntas.
Aquí hay una toma interesante:
function fMI(num,arr) { return arr .map((n) => n.toString().split('') .map((m) => parseInt(m))) .map((o, i) => o.some((p) => p === num) ? i : null) .filter((f) => f !== null); } const result = fMI(1,[1, 11, 34, 52, 61]); console.log(result); Primero revisamos todos los números en la matriz, los convertimos en cadenas y los dividimos para reemplazar los números originales con matrices de dígitos. Luego ejecutamos esas matrices de dígitos a través de parseInt y las convertimos en matrices de números. Finalmente, usamos .some para verificar si alguno de los dígitos en la matriz de dígitos es num y devolvemos una matriz de índices o nulos que ejecutamos a través de un filtro que elimina los nulos y finalmente devolvemos una matriz de los índices para donde cualquiera de los dígitos del número es lo mismo que num.