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

226
Vistas
Counting arrays values in JavaScript

I have to create a function that receives an array in which every element is a number, or it can be another array with numbers inside, for example : const array = [1, [2, [3,4]], [5,6], 7]; The function should count all the values and return it countArray(array); --> should return 28 because (1 + 2 + 3 + 4 + 5 + 6 + 7)

I tried this

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));

but this does not work, anybody knows why?

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

0

Firstly you need to do single for incoming nested array.
You can use flat() method.

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

Array.prototype.reduce can be used to iterate through the array,
adding the current element value to the sum of the previous element values

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

So,

    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

Two solutions. First is simply to modify these lines:

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

to these:

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

or this:

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

Second solution:

const array = [1, [2, [3,4]], [5,6], 7]

countArray = array => array.flat(Infinity).reduce( (a, c) => a + c, 0 );

console.log(countArray(array))

The second solution depends on Array.prototype.flat, which is fairly (ECMA 2019) recent so support may not be 100%. There are other options, pretty good list here

about 4 years ago · Juan Pablo Isaza Denunciar

0

To spare you the effort of recursion here's a simple trick.

Ordinarily, on its own, flat will only flatten a series of nested arrays one level deep. If you supply Infinity as an argument you can flatten nested arrays n-level deep, and then you can reduce over those elements to get the sum.

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