Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

227
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda