JavaScript does not have a built-in method to convert an integer to an array of integers. Converting positive integers is easy. Therefore, if you don't have a requirement to account for negative integers, and need to only convert positive integers to an array of digits, then you can do the following:
- Use
Array.from()
andNumber()
; - Use
String.prototype.split()
andNumber()
; - Use
String.prototype.match()
; - Looping and Adding Each Digit to the Array.
Using Array.from()
and Number()
The following steps would convert a positive integer to an array of digits:
- Convert the number to a string;
- Using
Array.from()
, convert the numeric string to an array of numeric string characters and then convert those to integers by specifyingNumber
as the second argument to the method (which is called on every element of the array).
// ES6+ function numToArray(num) { const numStr = String(num); return Array.from(numStr, Number); } console.log(numToArray(0)); // [0] console.log(numToArray(12345)); // [1, 2, 3, 4, 5]
You can make this into a one-liner like so:
// ES6+ const numToArray = (num) => Array.from(String(num), Number); console.log(numToArray(0)); // [0] console.log(numToArray(12345)); // [1, 2, 3, 4, 5]
Using String.prototype.split()
and Number()
The following steps would convert a positive integer to an array of digits:
- Convert the number to a string;
- Convert string to an array of numeric string characters using
String.prototype.split()
; - Convert each array item to an integer by passing
Number
as an argument toArray.prototype.map()
.
// ES6+ function numToArray(num) { const numStr = String(num); const arr = numStr.split(''); return arr.map(Number); } console.log(numToArray(0)); // [0] console.log(numToArray(12345)); // [1, 2, 3, 4, 5]
You can make this into a one-liner like so:
// ES6+ const numToArray = (num) => String(num).split('').map(Number); console.log(numToArray(0)); // [0] console.log(numToArray(12345)); // [1, 2, 3, 4, 5]
Using String.prototype.match()
The following steps would convert a positive integer to an array of digits:
- Convert the number to a string;
- Convert string to an array of numeric strings using a regular expression with
String.prototype.match()
; - Return empty array when no match is found (i.e. when
String.prototype.match()
returnsnull
). Otherwise, useArray.prototype.map()
to convert each array item to an integer, by passingNumber
as an argument to it.
// ES6+ function numToArray(num) { const strArr = String(num).match(/\d/g); return Array.isArray(strArr) ? strArr.map(Number) : []; } console.log(numToArray(0)); // [0] console.log(numToArray(12345)); // [1, 2, 3, 4, 5]
Please note that the g
flag used with match
is important here because it returns all results matching the regular expression. Starting with ES11, you could also use String.prototype.matchAll()
instead.
Looping and Adding Each Digit to the Array
The following steps would convert a positive integer to an array of digits:
- Convert the number to a string;
- Loop over each character in the string, converting each one to an integer and adding it to an array one by one.
function numToArray(num) { const numericStr = String(num); const numbersArr = []; for (let i = 0; i < numericStr.length; i++) { numbersArr.push(parseInt(numericStr[i], 10)); } return numbersArr; } console.log(numToArray(0)); // [0] console.log(numToArray(12345)); // [1, 2, 3, 4, 5]
If you don't wish to convert the number to a string, then you can do the following:
- Determine the length of the integer;
- Loop and add the last digit of the integer to the same position in a new array;
- Chop off the last digit from the integer, and repeat till there are no digits remaining.
// ES6+ function numToArray(num) { // get length of number let i = (num === 0) ? 1 : Math.ceil(Math.log10(Math.abs(num) + 1)); const numbersArr = []; do { // add number at same position in the new array numbersArr[--i] = num % 10; // take last digit off `num` num = Number.parseInt(num / 10, 10); } while (num !== 0); return numbersArr; } console.log(numToArray(0)); // [0] console.log(numToArray(12345)); // [1, 2, 3, 4, 5]
This post was published by Daniyal Hamid. Daniyal currently works as the Head of Engineering in Germany and has 20+ years of experience in software engineering, design and marketing. Please show your love and support by sharing this post.