I came across a problem of converting a char value to a number when I was working with Javascript. The interesting thing was that the solution just wasn’t as obvious as I initially thought. In this post, I will talk about how I solved the problem and why did I come across it in the first place.

# Background

In a previous post, I mentioned how I was solving a bunch of recursive problems on CodingBat.com! Well…I had a bit too much fun with it and I decided to extend the fun by solving string problems as well. Solving the string problems was good easy fun, until I came across a minor issue.

# Issue

The problem I was trying to solve was sumDigits. It’s a simple problem i.e.

As I mentioned in my previous post and as you can see, CodingBat is focused on Java. However, the problem description is fairly generic and can be solved in any language.

# Solution

Here’s my solution in Typescript.

```
sumDigits(str: string): number {
if(str.length == 0) {
return 0;
}
var sum = 0;
let charArray = str.split("");
charArray.forEach((val) => {
let num = parseInt(val);
if(!isNaN(num)) {
sum += num;
}
});
return sum;
}
```

The solution should be fairly self-explanatory but let me describe it. The problem is, we are trying to find out the numeric values in a string and return a sum of all of them. So, we call the split method on the string and a split method with an empty string will return an array of characters. Then again, we use an ES6 method to traverse the array i.e. forEach and if the character is a number we add it to our sum. I think, the only things typescript specific in the above function is the type (i.e. string and number) information. The rest of the code is just plain ES6 Javascript.

*p.s. Having types in Javascript is so awesome, thank you MS for Typescript 🙂*

### Any other way to solve this?

Yes of course. Hence let’s look at a slightly more old-fashioned way of solving this and this time we will solve it in pure Javascript.

```
CBatSolutions.prototype.sumDigits = function(str) {
if(str.length == 0) {
return 0;
}
var sum = 0;
let characterArr = str.split("");
for(var i=0; i < characterArr.length; i++) {
var absVal = Math.abs(characterArr[i]);
if(!Number.isNaN(absVal)) {
sum += absVal;
}
}
return sum;
}
```

The difference in this solution is we are using an old for loop where we iterate through every character in an array. (besides being in Javascript and not Typescript).

### Any other solution?

Well, yes of course. Why not? We can solve this entire problem recursively. The recursive implementation is actually quite straight forward and clean looking.

```
CBatSolutions.prototype.sumDigitsR = function(str) {
if(str.length == 0) {
return 0;
}
var absVal = Math.abs(str.charAt(0));
if(!Number.isNaN(absVal)) {
return absVal + this.sumDigitsR(str.substring(1));
} else {
return this.sumDigitsR(str.substring(1));
}
}
```

# Summary

For someone like me who’s been working with Javascript since 2008, it’s great to see some of the ES6 changes 🙂 Long live Javascript!

*As usual, if you find any of my posts useful support us by buying or even trying one of our products and leave us a review on the app store.*

## 2 Comments

## Jayen Ashar · November 16, 2019 at 12:19 am

how about this?

“`

const sumDigits = str => str.split(“”).reduce((acc, s) => {

const n = Number(s);

return acc + (n ? n : 0);

}, 0);

“`

## Jayen Ashar · November 16, 2019 at 12:22 am

ah no, this one is better:

const sumDigits = str => str.split(“”).reduce((acc, s) => acc + (Number(s) || 0), 0);