2012-03-28 11 views
30

Este es mi código hasta ahora:¿Cómo se puede separar un entero en dígitos separados en una matriz en JavaScript?

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); 

Pero cuando ejecuto mi código me sale esto: [9, 1, 2, 3, 4, 5, 6, 7, 8]

Si alguien puede ver el problema o encontrar una mejor solución Me gustaría mucho agradecerán!

Respuesta

54

¿Por qué no hacer esto?

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

Solo una nota, esto le dará una serie de cadenas ... no números. – rgthree

+0

Buen punto. Pero por su aspecto, el dígito se multiplicará por sí mismo, lo cual creo que funciona bien. Todo lo que tiene que hacerse es tener cuidado, y probablemente use 'parseInt (..., 10);' en los momentos apropiados. –

+0

el problema es que quiero cuadrar los dígitos después, y creo que no puedo hacer eso con una cadena? – magnusbl

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

^^ esto devolverá una matriz de cadenas

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

^^ esto va a devolver una matriz de enteros

+0

Esto también dará una serie de cadenas ... no números – rgthree

+0

¡Agradable! Solo tenga en cuenta que .map no está disponible en IE 8 o inferior. – rgthree

+0

Uno esperaría que 'map (parseInt)' funcionara pero 'Array.map' llama a la función también con el índice y la matriz misma (¿era realmente necesario?) Por lo que no funcionaría. – tokland

1

Mover:

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

anterior

var j = k/10; 
20

Me doy cuenta de que esto fue preguntado hace varios meses, pero tengo una adición a la respuesta de Samccone, que es más sucinta pero no tengo el representante para agregar como comentario.

En lugar de:

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

considerar:

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

¿Qué exactamente hace el 10 en '' '.toString (10)' ''? Sé que hace referencia a radix 10, pero lo he probado con y sin y no puedo encontrar una diferencia discernible. ¡Gracias! Además, genial edición. – EFH

+0

@EFH Si no se especifica la raíz, se supone que la base preferida es 10. Ref (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toString) – jtlindsey

+0

Solo quería soltar una "solución increíble" aquí. – Ted

3

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

10

¿Qué hay de:

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

Buena solución, clara y fácil de entender, y hace uso de las características de ES6. También una de las características recomendadas [aquí] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/map?v=control) –

+0

'.map (Number)' es muy ¡bonito! – Lonely

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

Si bien este código puede responder a la pregunta, proporcionar un contexto adicional con respecto a cómo y/o por qué resuelve el problema mejoraría el valor a largo plazo de la respuesta. –

0

Han pasado más de 5 años para esta pregunta, pero siempre son bienvenidos las formas eficientes de codificación/scripting.

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