How do I separate an integer into separate digits in an array in JavaScript?

JavascriptArraysDigits

Javascript Problem Overview


This is my code so far:

var n = 123456789;
var d = n.toString().length;
var digits = [];
var squaredDigits = [];
for (i = d; i >= 1; i--) {
    var j = k / 10;
    var r = (n % k / j) - 0.5;
    var k = Math.pow(10, i);
    var result = r.toFixed(); 
    digits.push(result);
}

console.log(digits);

But when I run my code I get this: [9, 1, 2, 3, 4, 5, 6, 7, 8]

If anyone can see the problem or find a better solution I would very much appreciate it!

Javascript Solutions


Solution 1 - Javascript

Why not just do this?

var n =  123456789;
var digits = (""+n).split("");

Solution 2 - Javascript

What about:

const n = 123456;
Array.from(n.toString()).map(Number);
// [1, 2, 3, 4, 5, 6]

Solution 3 - Javascript

(123456789).toString(10).split("")

^^ this will return an array of strings

(123456789).toString(10).split("").map(function(t){return parseInt(t)})

^^ this will return an array of ints

Solution 4 - Javascript

I realize this was asked several months ago, but I have an addition to samccone's answer which is more succinct but I don't have the rep to add as a comment!

Instead of:

(123456789).toString(10).split("").map(function(t){return parseInt(t)})

Consider:

(123456789).toString(10).split("").map(Number)

Solution 5 - Javascript

Modified the above answer a little bit. We don't really have to call the 'map' method explicitly, because it is already built-in into the 'Array.from' as a second argument. As of MDN.

> Array.from(arrayLike[, mapFn[, thisArg]])

let num = 1234;
let arr = Array.from(String(num), Number);
console.log(arr); // [1, 2, 3, 4]

Solution 6 - Javascript

const toIntArray = (n) => ([...n + ""].map(v => +v))

Solution 7 - Javascript

It is pretty short using Array destructuring and String templates:

const n = 12345678;
const digits = [...`${n}`];
console.log(digits);

Solution 8 - Javascript

Assuming the value n:

const n = 123456789

A minimal ES6 version if you'd like:

String(n).split("").map(Number)

An even shorter but less readable version:

[...String(n)].map(Number)

Want to go even shorter (but less readable)?

[...`${n}`].map(Number)

Shorter you say (and basically illegible)!?

[...""+n].map(Number)

Now you're a real programmer, congrats!

Side note

These aren't really efficient (as most in this thread) since you're allocating 2 arrays instead of 1. Want to be more efficient? Try this which only allocates one array:

var arr = []
var str = String(n)
for (var i = 0; i < str.length; i++) {
  arr.push(Number(str[i]))
}

Oldschool but more efficient, huzzah!

Solution 9 - Javascript

It's very simple, first convert the number to string using the toString() method in JavaScript and then use split() method to convert the string to an array of individual characters.

For example, the number is num, then

const numberDigits = num.toString().split('');

Solution 10 - Javascript

This will work for a number greater than 0. You don't need to convert the number into string:

function convertNumberToDigitArray(number) {
    const arr = [];
    while (number > 0) {
        let lastDigit = number % 10;
        arr.push(lastDigit);
        number = Math.floor(number / 10);
    }
    return arr;
}

Solution 11 - Javascript

You can get a list of string from your number, by converting it to a string, and then splitting it with an empty string. The result will be an array of strings, each containing a digit:

const num = 124124124
const strArr = `${num}`.split("")

OR to build on this, map each string digit and convert them to a Number:

const intArr = `${num}`.split("").map(x => Number(x))

Solution 12 - Javascript

Here's an alternative to Nicolás Fantone's answer. You could argue it's maybe a little less readable. The emphasis is that Array.from() can take an optional map function as a parameter. There are some performance gains this way since no intermediate array gets created.

const n = 123456;
Array.from(n.toString(), (val) => Number(val)); // [1, 2, 3, 4, 5, 6]

Solution 13 - Javascript

const number = 1435;
number.toString().split('').map(el=>parseInt(el));

Solution 14 - Javascript

Suppose,

let a = 123456

First we will convert it into string and then apply split to convert it into array of characters and then map over it to convert the array to integer.

let b = a.toString().split('').map(val=>parseInt(val))
console.log(b)

Solution 15 - Javascript

Move:

var k = Math.pow(10, i);

above

var j = k / 10;

Solution 16 - Javascript

var num = 123456789;
num = num.toString(); //'123456789'
var digits = num.split(""); //[ '1', '2', '3', '4', '5', '6', '7', '8', '9' ]

Solution 17 - Javascript

It's been a 5+ years for this question but heay always welcome to the efficient ways of coding/scripting.

var n = 123456789;
var arrayN = (`${n}`).split("").map(e => parseInt(e))

Solution 18 - Javascript

Another method here. Since number in Javascript is not splittable by default, you need to convert the number into a string first.

var n = 123;
n.toString().split('').map(Number);

Solution 19 - Javascript

I ended up solving it as follows:

const n = 123456789;
let toIntArray = (n) => ([...n + ""].map(Number));
console.log(toIntArray(n));

Solution 20 - Javascript

let input = 12345664
const output = []
while (input !== 0) {
  const roundedInput = Math.floor(input / 10)
  output.push(input - roundedInput * 10)
  input = roundedInput
}
console.log(output)

Solution 21 - Javascript

Update with string interpolation in ES2015.

const num = 07734;
let numStringArr = `${num}`.split('').map(el => parseInt(el)); // [0, 7, 7, 3, 4]

Solution 22 - Javascript

var n = 38679;
var digits = n.toString().split("");
console.log(digits);

Now the number n is divided to its digits and they are presented in an array, and each element of that array is in string format. To transform them to number format do this:

var digitsNum = digits.map(Number);
console.log(digitsNum);

Or get an array with all elements in number format from the beginning:

var n = 38679;
var digits = n.toString().split("").map(Number);
console.log(digits);

Solution 23 - Javascript

This is actually the cleanest solution I think.

  var n =  123456789;
  const digits = (`${n}`).split('')

You put it in a string literal but it is kept as numbers, and then it is split to an array and assigned to digits.

Solution 24 - Javascript

const toIntArray = (n) => ([...n + ""].map(v => +v))

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
QuestionmagnusblView Question on Stackoverflow
Solution 1 - JavascriptNiet the Dark AbsolView Answer on Stackoverflow
Solution 2 - JavascriptNicolás FantoneView Answer on Stackoverflow
Solution 3 - JavascriptsamcconeView Answer on Stackoverflow
Solution 4 - Javascriptuser2521439View Answer on Stackoverflow
Solution 5 - JavascriptAlexanderView Answer on Stackoverflow
Solution 6 - JavascriptAlexey SukhikhView Answer on Stackoverflow
Solution 7 - JavascriptEmeeusView Answer on Stackoverflow
Solution 8 - JavascriptDana WoodmanView Answer on Stackoverflow
Solution 9 - JavascriptNaved AhmadView Answer on Stackoverflow
Solution 10 - Javascripttechguy2000View Answer on Stackoverflow
Solution 11 - JavascriptCreeptosisView Answer on Stackoverflow
Solution 12 - JavascriptPDubView Answer on Stackoverflow
Solution 13 - JavascriptAdam KaczmarekView Answer on Stackoverflow
Solution 14 - JavascriptRAGING STARView Answer on Stackoverflow
Solution 15 - JavascriptmatthewkView Answer on Stackoverflow
Solution 16 - JavascriptDulaj ChathurangaView Answer on Stackoverflow
Solution 17 - JavascriptSanjay ShrView Answer on Stackoverflow
Solution 18 - JavascriptJungdo LeeView Answer on Stackoverflow
Solution 19 - JavascriptPenny LiuView Answer on Stackoverflow
Solution 20 - JavascriptNickView Answer on Stackoverflow
Solution 21 - JavascriptMarkView Answer on Stackoverflow
Solution 22 - JavascriptIvan VrzogicView Answer on Stackoverflow
Solution 23 - JavascriptJohan BerglundView Answer on Stackoverflow
Solution 24 - Javascriptforever_learning_alienView Answer on Stackoverflow