JavaScript Number Split into individual digits

JavascriptMath

Javascript Problem Overview


I am trying to solve a math problem where I take a number e.g. 45, or 111 and then split the number into separate digits e.g. 4 5 or 1 1 1. I will then save each number to a var to run a method on. Does anyone know how to split a number into individual digitals?

For example I have a loop that runs on an array :

for (var i = 0; i < range.length; i++) {
  var n = range[i];
}

For each number, I would like to split its digits and add them together?

Javascript Solutions


Solution 1 - Javascript

var num = 123456; var digits = num.toString().split(''); var realDigits = digits.map(Number) console.log(realDigits);

Solution 2 - Javascript

var number = 12354987,
	output = [],
    sNumber = number.toString();

for (var i = 0, len = sNumber.length; i < len; i += 1) {
	output.push(+sNumber.charAt(i));
}

console.log(output);

/* Outputs:
 *
 * [1, 2, 3, 5, 4, 9, 8, 7]
 */ 

UPDATE: Calculating a sum

for (var i = 0, sum = 0; i < output.length; sum += output[i++]);
console.log(sum);

/*
 * Outputs: 39
 */

Solution 3 - Javascript

You can also do it in the "mathematical" way without treating the number as a string:

var num = 278;
var digits = [];
while (num > 0) {
    digits.push(num % 10);
    num = Math.trunc(num / 10);
}
digits.reverse();
console.log(digits);

One upside I can see is that you won't have to run parseInt() on every digit, you're dealing with the actual digits as numeric values.

Solution 4 - Javascript

This is the shortest I've found, though it does return the digits as strings:

let num = 12345;

[...num+''] //["1", "2", "3", "4", "5"]

Or use this to get back integers:

[...num+''].map(n=>+n) //[1, 2, 3, 4, 5]

Solution 5 - Javascript

I will provide a variation on an answer already given so you can see a different approach that preserves the numeric type all along:

var number = 12354987,
    output = [];
		
while (number) {
    output.push(number % 10);
    number = Math.floor(number/10);
}

console.log(output.reverse().join(',')); // 1,2,3,5,4,9,8,7

I've used a technique such as the above to good effect when converting a number to Roman numerals, which is one of my favorite ways to begin to learn a programming language I'm not familiar with. For instance here is how I devised a way to convert numbers to Roman numerals with Tcl slightly after the turn of the century: http://code.activestate.com/recipes/68379-conversion-to-roman-numerals/

The comparable lines in my Tcl script being:

  while {$arabic} {
    set digit [expr {$arabic%10}]
    set arabic [expr {$arabic/10}]

Solution 6 - Javascript

// Split positive integer n < 1e21 into digits:
function digits(n) {
  return Array.from(String(n), Number);
}

// Example:
console.log(digits(1234)); // [1, 2, 3, 4]

Solution 7 - Javascript

You can work on strings instead of numbers to achieve this. You can do it like this

(111 + '').split('')

This will return an array of strings ['1','1','1'] on which you can iterate upon and call parseInt method.

parseInt('1') === 1

If you want the sum of individual digits, you can use the reduce function (implemented from Javascript 1.8) like this

(111 + '').split('').reduce(function(previousValue, currentValue){  
  return parseInt(previousValue,10) + parseInt(currentValue,10);  
})

Solution 8 - Javascript

Without converting to string:

function toDigits(number) {
	var left;
	var results = [];

    while (true) {
   		left = number % 10;
		results.unshift(left);
		number = (number - left) / 10;
		if (number === 0) {
			break;
        }
    }

	return results;
}

Solution 9 - Javascript

Using String, ... and map

const num = 7890;

const digits = [...String(num)].map(Number);

console.log(digits)

Alternatively, using ... and reduce to get digits and their sum.

const sumOfDigits = num => [...""+num].reduce((acc, dig) => acc + +dig, 0);

console.log('Sum of digits: ', sumOfDigits(7890));

Solution 10 - Javascript

Use String, split and map :

String(number).split("").map(Number);

function splitNum(num) {
    return String(num).split("").map(Number);
}

console.log(splitNum(1523)); // [1, 5, 2, 3]
console.log(splitNum(2341)); // [2, 3, 4, 1]
console.log(splitNum(325)); // [3, 2, 5]

Solution 11 - Javascript

With ES6, you could use Array.from with a stringed number as iterables and Number as mapping function.

const getDigits = n => Array.from(n.toString(), Number);

console.log(getDigits(12345));

Solution 12 - Javascript

A fun introduction to recursion. This answer takes a Number and returns an array of Number digits. It does not convert the number to a string as an intermediate step.

Given n = 1234,

  • n % 10 will return first (right-moist) digit, 4
  • n / 10 will return 123 with some remainder
  • Using Math.floor we can chop the remainder off
  • Repeating these steps, we can form the entire result

Now we just have to build the recursion condition,

  • If the number is already a single digit (n < 10), return an array singleton of the digit
  • otherwise (inductive) the number is 10 or greater; recur and prepend to the first digit

const digits = (n = 0) =>
  n < 10
    ? [ n ]
    : [ ... digits (Math.floor (n / 10)), n % 10 ]

console.log (digits ())        // [ 0 ]
console.log (digits (1))       // [ 1 ]
console.log (digits (12))      // [ 1, 2 ]
console.log (digits (123))     // [ 1, 2, 3 ]
console.log (digits (11234))   // [ 1, 2, 3, 4 ]

console.log (digits (123456789012))
// [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2 ]

Solution 13 - Javascript

This also works:

var number = 12354987;
console.log(String(number).split('').map(Number));

Solution 14 - Javascript

Separate each 2 parametr.

function separator(str,sep) {
    var output = '';
    for (var i = str.length; i > 0; i-=2) {
        var ii = i-1;
        if(output) {
            output = str.charAt(ii-1)+str.charAt(ii)+sep+output;
        } else {
            output = str.charAt(ii-1)+str.charAt(ii);
        }            
    }
    return output;
}
console.log(separator('123456',':')); //Will return 12:34:56

Solution 15 - Javascript

Shadow Wizard , extended version by Orien

var num:Number = 1523;
var digits:Array = [];
var cnt:int = 0;
while (num > 0) {
    var mod:int = num % 10;
	digits.push(mod * Math.pow(10, cnt))
	
    num = Math.floor(num / 10);
	cnt++;
}
digits.reverse();
trace(digits);

output:1000,500,20,3

Solution 16 - Javascript

A functional approach in order to get digits from a number would be to get a string from your number, split it into an array (of characters) and map each element back into a number.

For example:

var number = 123456;

var array = number.toString()
.split('')
.map(function(item, index) {
   return parseInt(item);
});

console.log(array); // returns [1, 2, 3, 4, 5, 6]

If you also need to sum all digits, you can append the reduce() method to the previous code:

var num = 123456;

var array = num.toString()
.split('')
.map(function(item, index) {
   return parseInt(item);
})
.reduce(function(previousValue, currentValue, index, array) {
  return previousValue + currentValue;
}, 0);

console.log(array); // returns 21

As an alternative, with ECMAScript 2015 (6th Edition), you can use arrow functions:

var number = 123456;
var array = number.toString().split('').map((item, index) => parseInt(item));
console.log(array); // returns [1, 2, 3, 4, 5, 6]

If you need to sum all digits, you can append the reduce() method to the previous code:

var num = 123456;

var result = num.toString()
.split('')
.map((item, index) => parseInt(item))
.reduce((previousValue, currentValue) => previousValue + currentValue, 0);

console.log(result); // returns 21

Solution 17 - Javascript

I used this simple way of doing it.

To split digits

var N = 69;
var arr = N.toString().split('').map(Number)
// outputs [6,9]
console.log( arr ); 

To add them together

console.log(arr.reduce( (a,b) => a+b )); // 15


Solution 18 - Javascript

And the easiest.... num_string.split('').map(Number)

Try below:

console.log((''+123).split('').map(Number))

Solution 19 - Javascript

To just split an integer into its individual digits in the same order, Regular Expression is what I used and prefer since it prevents the chance of loosing the identity of the numbers even after they have been converted into string.

The following line of code convert the integer into a string, uses regex to match any individual digit inside the string and return an array of those, after which that array is mapped to be converted back to numbers.

const digitize = n => String(n).match(/\d/g).map(Number);

Solution 20 - Javascript

I might be wrong, but a solution picking up bits and pieces. Perhaps, as I still learning, is that the functions does many things in the same one. Do not hesitate to correct me, please.

const totalSum = (num) => [...num + ' '].map(Number).reduce((a, b) => a + b);

So we take the parameter and convert it to and arr, adding empty spaces. We do such operation in every single element and push it into a new array with the map method. Once splited, we use reduce to sum all the elements and get the total.

As I said, don't hesitate to correct me or improve the function if you see something that I don't.

Almost forgot, just in case:

const totalSum = (num) => ( num === 0 || num < 0) ? 'I need a positive number' : [...num + ' '].map(Number).reduce((a, b) => a + b);

If negatives numbers or just plain zero go down as parameters. Happy coding to us all.

Solution 21 - Javascript

I am posting this answer to introduce the use of unshift which is a modern solution. With push, you add to the end of an array while unshift adds to the beginning. This makes the mathematical approach more powerful as you won't need to reverse anymore.

let num = 278;
let digits = [];
while (num > 0) {
    digits.unshift(num % 10);
    num = parseInt(num / 10);
}
console.log(digits);

Solution 22 - Javascript

var num = 111,
 separateDigits = num.toString().split(""), i, l = separateDigits.length;

for( i = 0; i < l; ++i ) {
someObject.someMethod( +separateDigits[i] );
}

Solution 23 - Javascript

You can try this.

  var num = 99;

  num=num.toString().split("").map(value=>parseInt(value,10)); //output [9,9]

Hope this helped!

Solution 24 - Javascript

function iterateNumber(N, f) {
    let n = N;
    var length = Math.log(n) * Math.LOG10E + 1 | 0;
    for (let i = 0; i < length; i++) {
        const pow = Math.pow(10, length - i - 1)
        let c = (n - (n % pow)) / pow
        f(c, i)
        n %= pow
    }
}

Solution 25 - Javascript

('' + 123456789).split('').map( x => +x ).reduce( (a,b) => a+b ) === 45

true

or without map

('' + 123456789).split('').reduce( (a,b) => (+a)+(+b) ) === 45

true

Solution 26 - Javascript

You can do it in single line, seperate each digits than add them together :

var may = 12987;
var sep = (""+may).split("").map(n=>+n).reduce((a,b)=>a+b);

Solution 27 - Javascript

This is my short solution.. with sum of number

    function sum (num) {
    let sNumber = num
        .toString()
        .split('')
        .reduce((el1, el2) => {
            return Number(el1) + Number(el2)
        }, 0)
        return sNumber
     }

> console.log(sum(123))
> console.log(sum(456))

Solution 28 - Javascript

javascript has a function for it and you can use it easily.

console.log(new Intl.NumberFormat().format(number));

for example :

console.log(new Intl.NumberFormat().format(2334325443534));
==> 2,334,325,443,534

Solution 29 - Javascript

Iterate through each number with for...of statement.

By adding a + sign before a String, it will be converted into a number.

const num = 143,
  digits = [];

for (const digit of `${num}`) {
  digits.push(+digit)
}
console.log(digits);

Inspired by @iampopov You can write it with spread syntax.

const num = 143;
const digits = [...`${num}`].map(Number);
console.log(digits);

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionjonnyhitekView Question on Stackoverflow
Solution 1 - JavascriptBrian GlazView Answer on Stackoverflow
Solution 2 - JavascriptLappleView Answer on Stackoverflow
Solution 3 - JavascriptShadow Wizard Says No More WarView Answer on Stackoverflow
Solution 4 - JavascriptMarco GaspariView Answer on Stackoverflow
Solution 5 - JavascriptDexygenView Answer on Stackoverflow
Solution 6 - Javascriptle_mView Answer on Stackoverflow
Solution 7 - JavascriptNarendra YadalaView Answer on Stackoverflow
Solution 8 - JavascriptkaraxunaView Answer on Stackoverflow
Solution 9 - JavascriptSiva K VView Answer on Stackoverflow
Solution 10 - JavascriptGiacomo CasadeiView Answer on Stackoverflow
Solution 11 - JavascriptNina ScholzView Answer on Stackoverflow
Solution 12 - JavascriptMulanView Answer on Stackoverflow
Solution 13 - JavascriptiampopovView Answer on Stackoverflow
Solution 14 - JavascriptfdrvView Answer on Stackoverflow
Solution 15 - JavascriptOrienView Answer on Stackoverflow
Solution 16 - JavascriptImanou PetitView Answer on Stackoverflow
Solution 17 - JavascriptmakkBitView Answer on Stackoverflow
Solution 18 - JavascriptAtterssonView Answer on Stackoverflow
Solution 19 - JavascriptSNOSeedsView Answer on Stackoverflow
Solution 20 - JavascriptRoberto GarciaView Answer on Stackoverflow
Solution 21 - JavascriptJohn DavidView Answer on Stackoverflow
Solution 22 - JavascriptEsailijaView Answer on Stackoverflow
Solution 23 - JavascriptAditya RajView Answer on Stackoverflow
Solution 24 - Javascriptuser2584621View Answer on Stackoverflow
Solution 25 - JavascriptgkellyView Answer on Stackoverflow
Solution 26 - JavascriptStstView Answer on Stackoverflow
Solution 27 - JavascriptTodor MarkovView Answer on Stackoverflow
Solution 28 - Javascriptmahdi tabatabaeeView Answer on Stackoverflow
Solution 29 - JavascriptPenny LiuView Answer on Stackoverflow