hi, please I have problem with extracting number out of string and sum them without using regular expression.
here is my code but it is given me 44 instead of 935
function sumNumbers(str){
return str.split('').filter(a => a.charCodeAt() <= 57).map(a => parseInt(a)).reduce((a, b) => a + b, 0);
}
console.log(sumNumbers('1weudh56jdnbfskjn788sdhkfbs90'))
Ahh I see, it’s because you’re separating the string in individual characters, so basically each digit is its own number. But the challenge wants you to also take in consideration 2+ digit numbers like 90, 56 and 788 (not 9 0 5 6 7 8 8 individually) hence the need for regular expressions.
It’s not that you can’t do it without it them, but it becomes more complex.
If JS’s standard library had a groupWith
function you could easily group them by the <= 57 condition so you’d obtain an array of ['1', 'weudh', '56', ...etc]
and filter out the ones whose parseInt
result yields NaN
.
But since that’s not the case, you have to iterate the whole string char by char and have a separate empty array to where you’ll push each number and checking when the character changes from being a number to a non-number.
Yes I have done that… I separated the numbers into one array, yet am still having them as single element not like [1, 56, 788, 90]
That is where the problem, kind show me the line of code to use… Please
This is the naive and semi-imperative algorithmic way of doing it:
But this is the correct way:
const sumNumbers = str => str
.match(/\d+/g)
.map(nStr => parseInt(nStr, 10))
.reduce((acc, n) => acc + n, 0)
1 Like
Thank you… It is the first one I am trying to achieve I have done that of regex already… Thanks… I have seen where am getting it wrong
You can use loops for that.
- Create 2 empty arrays.
- Create empty string
- Go “looping” array of characters you got. Compare each member using switch case whom will return member if its char is number.
- Add such char to string.
- If currently selected member isn’t number, push string into array1.
- When it’s finished, take array1 which is now filled with “stringified” numbers and use it in another loop.
- On each member of array of stringified number use
Number(member)
and pushed them into second empty array.
- Now you got array of numbers.
PS: Need work if your numbers are floats …
1 Like