Need to receive:
digitize(12345) -> [5,4,3,2,1]
I wrote a code:
function digitize(n) {
let arr = Array.from(n + '');
return arr.reverse();
}
console.log(digitize(12345));
Output: [ '5', '4', '3', '2', '1' ]
This is very close, but this is showing an array of strings. How can I get an array of numbers (without the quotes), instead?
You could map (the second parameter of Array.from) with Number.
This approach works only for positive integers which are equal or less than Number.MAX_SAFE_INTEGER (9007199254740991).
function digitize(n) {
return Array
.from(n.toString(), Number)
.reverse();
}
console.log(digitize(12345));
You could consider a recursive function, and do it without conversion to string:
function digitize(n) {
return n < 10 ? [n] : [n % 10, ...digitize(Math.floor(n / 10))];
}
console.log(digitize(12345));
I would not go the "hacky", buggy and presumably less efficient route over stringification here:
function digitize(n) {
const digits = [];
while (n >= 1) {
digits.push(n % 10);
n = Math.floor(n / 10);
}
return digits;
}
or using a do-while depending if you want digitize(0) to be [0] instead of []:
function digitize(n) {
const digits = [];
do {
digits.push(n % 10);
n = Math.floor(n / 10);
} while (n >= 1)
return digits;
}
this will still fail for some large floats due to precision issues though.