Question: 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

```js
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?

Answer: 
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:

```js
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](https://www.techiedelight.com/recursively-flatten-nested-array-javascript/)
Changing as little as possible about your code, you need add either the `countArray` of the item (if the item is an array) **or** the item itself (if it's not an array) to the sum.

```js
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])) {
      sum = sum + countArray(array[i])
    } else {
      sum = sum + array[i]
    }
  }
  return sum
}

console.log(countArray(array));
```