Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

300
Views
Función de Javascript que cuenta cuántos números hay en la matriz (la matriz puede contener otras matrices)

¿Cómo puedo escribir una función que, al recibir a matriz ya dada del programa que puede contener números, booleanos e incluso otras matrices, cuente cuántos números están presentes en a ?

Aquí está mi código que no funciona (cada vez que da 0, independientemente de lo que contenga la matriz):

 function test(a) { var sum = 0 for (i=0; i<a.length; i++){ if (typeof a[i]==Number) sum++ } return sum }

Gracias.

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

puedes probar esto:

 const array = ["Hi", true, 10, "Car", 20, 50, 1500, false]; const flatedArray = array.flat(Infinity); const count = flatedArray.filter(x => typeof x == 'number').length; console.log(count) // 4

o cambia tu código:

 function test(a) { const flatedArray = a.flat(Infinity); let sum = 0 for (i = 0; i < flatedArray.length; i++) { if (typeof a[i] == 'number') { sum++ } } return sum } const array = ["Hi", true, 10, "Car", 20, 50, 1500, false]; console.log(test(array)) // 4

o cambiar su función:

 function test(a) { const flat = a.flat(Infinity); return a.filter(x => typeof x == 'number').length; } const array = ["Hi", true, 10, "Car", 20, 50, 1500, false]; console.log(test(array)) // 4
about 4 years ago · Juan Pablo Isaza Report

0

Tienes algunos problemas:

  • typeof <operand> devuelve una cadena y no un objeto, debe verificar con una cadena typeof a[i] === "number" .
  • Debería usar var / let antes de i en su bucle for para que i no se convierta en una variable global y, en cambio, permanezca dentro del alcance de su función (si usa var ) o su bucle for (si usa let ). Tener variables añadidas accidentalmente al alcance global puede conducir fácilmente a errores en el código que se ejecuta después de llamar a la función test() .

Como desea contar la frecuencia de los números tanto en su matriz como en las matrices anidadas, puede usar la recursividad. La idea es volver a llamar a la función test() dentro de test() cuando encuentre una matriz:

 function test(a) { let sum = 0; for (let i = 0; i < a.length; i++) { if (typeof a[i] === "number") sum++ else if(Array.isArray(a[i])) sum += test(a[i]); // sum the numbers within the `a[i]` array } return sum; } console.log(test([1,4, [2, 3, true], ["foo",0], 5, [123, [3.14, {a: 1}]]])); // 8

La otra opción es hacer que JS maneje la recursividad por usted, lo cual se puede hacer con la ayuda del método .flat() . Al usar .flat(Infinity) , primero puede aplanar su matriz (es decir, eliminar las matrices internas de cualquier nivel) y luego recorrerla:

 function test(a) { let sum = 0; let flat = a.flat(Infinity); for (let i = 0; i < flat.length; i++) { if (typeof flat[i] === "number") sum++; } return sum; } console.log(test([1,4, [2, 3, true], ["foo",0], 5, [123, [3.14, {a: 1}]]])); // 8

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!