15,305,361 members
See more:
Hi! I'm writing a function that counts all even numbers of an array, and it works pretty well, but, I don't know how to avoid counting empty strings or empty arrays as O while counting the number 0 as even. Here is my code:

```function is_an_even_number(array){
var count = 0;
for(let i = 0 ; i < array.length; i++) {
if (array[i] % 2 === 0){
count++;
}
}
return count;
}```

Also if you could help me improve the code, I believe there has to be a shorterand more efficient way to write this. I'll be really thankful.

This is how it should behave:

```//======================  EXAMPLE  ========================
is_an_even_number([1,5,9,33,65,[],'',0,66,['banana']])
2 // <======  EXPECTED OUTPUT
is_an_even_number(["100", 33, "Hello"])
1 // <======  EXPECTED OUTPUT
//=========================================================```

And this is how it's working:

```//======================  EXAMPLE  ========================
is_an_even_number([1,5,9,33,65,[],'',0,66,['banana']])
4 // <======  EXPECTED OUTPUT
is_an_even_number(["100", 33, "Hello"])
1 // <======  EXPECTED OUTPUT
//=========================================================```

//Solved! I'm just excluding empty strings and arrays with the && comparison:
```function is_an_even_number(array){
var count = 0;
for(let i = 0 ; i < array.length; i++) {
if (array[i] % 2 === 0 && array[i] != "" && array[i] != []){
count++;
}
}
return count;
}```

What I have tried:

```function is_an_even_number(array){
var count = 0;
for(let i = 0 ; i < array.length; i++) {
if (array[i] % 2 === 0){
count++;
}
}
return count;
}```

//Solved! I'm just excluding empty strings and arrays with the && comparison:
```function is_an_even_number(array){
var count = 0;
for(let i = 0 ; i < array.length; i++) {
if (array[i] % 2 === 0 && array[i] != "" && array[i] != []){
count++;
}
}
return count;
}```
Posted
Updated 17-Aug-21 3:16am
v2
CHill60 17-Aug-21 8:09am

check to see if each element is a number first - see the isNaN() function
gabriel19971029 17-Aug-21 9:06am

Thanks a lot! I tried this but I believe is not properly writen, because always returns 0.
function is_an_even_number(array){
var count = 0;
for(let i = 0 ; i < array.length; i++) {
if (array[i] % 2 === 0 && array[i] === !isNaN){
count++;
}
}
return count;
}
gabriel19971029 17-Aug-21 9:13am

Nevermind I got it now. Thanks!

## Solution 1

I would suggest you go to JavaScript Tutorial[^] and work through the tutorials.

## Solution 2

If you only needed to test for actual numbers, this would be simple.

However, things are complicated by the fact that you want to treat a string containing the decimal representation of a number as the number it represents.

I'd suggest creating a separate function to test for even numbers, or string representations of even numbers:
JavaScript
```function isAnEvenNumber(value){
if (typeof value === "number" || value instanceof Number) {
return value % 2 === 0;
}

if (typeof value === "string" || value instanceof String) {
const number = Number(value);
return !isNaN(number) && number % 2 === 0;
}

return false;
}```
NB: Don't use `parseInt` or `parseFloat` to try to convert the string to a number; both functions ignore trailing non-numeric characters. For example, `parseInt("221b")` will return `221`, whereas `Number("221b")` will return `NaN`.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Top Experts
Last 24hrsThis month
 Richard Deeming 135 OriginalGriff 135 CPallini 60 Rick York 50 CHill60 50
 OriginalGriff 3,586 Richard MacCutchan 1,275 CPallini 1,015 Richard Deeming 703 Patrice T 685

CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900