Necesidad de recibir:
digitalizar (12345) -> [5,4,3,2,1]
Escribí un código:
function digitize(n) { let arr = Array.from(n + ''); return arr.reverse(); } console.log(digitize(12345));Salida: [ '5', '4', '3', '2', '1' ]
Esto está muy cerca, pero muestra una matriz de cadenas. ¿Cómo puedo obtener una matriz de números (sin las comillas) en su lugar?
Podría mapear (el segundo parámetro de Array.from ) con Number .
Este enfoque solo funciona para números enteros positivos que son iguales o menores que Number.MAX_SAFE_INTEGER ( 9007199254740991 ).
function digitize(n) { return Array .from(n.toString(), Number) .reverse(); } console.log(digitize(12345));Podría considerar una función recursiva y hacerlo sin conversión a cadena:
function digitize(n) { return n < 10 ? [n] : [n % 10, ...digitize(Math.floor(n / 10))]; } console.log(digitize(12345));No iría por la ruta "hacky", con errores y presumiblemente menos eficiente sobre la encadenación aquí:
function digitize(n) { const digits = []; while (n >= 1) { digits.push(n % 10); n = Math.floor(n / 10); } return digits; } o usando un do-while dependiendo si quieres que digitize(0) sea [0] en lugar de [] :
function digitize(n) { const digits = []; do { digits.push(n % 10); n = Math.floor(n / 10); } while (n >= 1) return digits; }Sin embargo, esto seguirá fallando para algunos flotadores grandes debido a problemas de precisión.