Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

225
Vistas
Contando valores de matrices en JavaScript

Tengo que crear una función que reciba una matriz en la que cada elemento sea un número, o puede ser otra matriz con números dentro, por ejemplo: const matriz = [1, [2, [3,4]], [5, 6], 7]; La función debe contar todos los valores y devolverlos countArray(array); --> debería devolver 28 porque (1 + 2 + 3 + 4 + 5 + 6 + 7)

probé esto

 const array = [1, [2, [3,4]], [5,6], 7]; var countArray = function(array) { let sum = 0 for (let i = 0; i < array.length; i++) { if (Array.isArray(array[i])) { countArray(array[i]) } sum = sum + array[i] } return sum } console.log(countArray(array));

pero esto no funciona, alguien sabe por qué?

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

En primer lugar, debe hacer solo para la matriz anidada entrante.
Puede usar el método flat() .

 var nestedArray = [0, 1, 2, [3, 4]]; var flatArray = nestedArray.flat(Infinity); // [0,1,2,3,4];

Array.prototype.reduce se puede usar para iterar a través de la matriz,
sumando el valor del elemento actual a la suma de los valores de los elementos anteriores

 var totalSum = flatArray.reduce(function (accumulator, a) { return accumulator + a; }, 0)

Asi que,

 const array = [1, [2, [3,4]], [5,6], 7]; var countArray = function(array) { var flatArray = array.flat(Infinity); var totalSum = flatArray.reduce(function (accumulator, a) { return accumulator + a; }, 0) return totalSum; } console.log(countArray(array))

about 4 years ago · Juan Pablo Isaza Denunciar

0

Dos soluciones. Primero es simplemente modificar estas líneas:

 if (Array.isArray(array[i])) { countArray(array[i]) } sum= sum + array[i]

a estos:

 if (Array.isArray(array[i])) { sum += countArray(array[i]) } else { sum += array[i] }

o esto:

 sum += Array.isArray(array[i]) ? countArray(array[i]) : array[i]

Segunda solución:

 const array = [1, [2, [3,4]], [5,6], 7] countArray = array => array.flat(Infinity).reduce( (a, c) => a + c, 0 ); console.log(countArray(array))

La segunda solución depende de Array.prototype.flat , que es bastante reciente (ECMA 2019), por lo que es posible que el soporte no sea del 100 %. Hay otras opciones, bastante buena lista aquí

about 4 years ago · Juan Pablo Isaza Denunciar

0

Para ahorrarle el esfuerzo de la recursividad, aquí hay un truco simple.

Por lo general, por sí solo, flat solo aplanará una serie de arreglos anidados de un nivel de profundidad. Si proporciona Infinity como argumento, puede aplanar matrices anidadas de n niveles de profundidad y luego puede reduce esos elementos para obtener la suma.

 const array = [1, [2, [3,4]], [5,6, [3, [23, [1, 2, [12]]]]], 7]; function countArray(arr) { return arr .flat(Infinity) .reduce((acc, c) => acc + c, 0); } console.log(countArray(array));

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda