Comment séparer un entier en chiffres séparés dans un tableau en JavaScript?

C'est mon code jusqu'à présent:

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

Mais quand je lance mon code j'obtiens ceci: [9, 1, 2, 3, 4, 5, 6, 7, 8]

Si quelqu'un peut voir le problème ou trouver une meilleure solution, je l'apprécierais beaucoup!

36
demandé sur Bill the Lizard 2012-03-28 23:17:14

11 réponses

Pourquoi ne pas simplement faire cela?

var n =  123456789;
var digits = (""+n).split("");
62
répondu Niet the Dark Absol 2012-03-28 19:18:44
(123456789).toString(10).split("")

^^ cela renverra un tableau de chaînes

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

^^ cela renverra un tableau d'ints

39
répondu samccone 2012-03-28 19:26:42

Je me rends compte que cela a été demandé il y a plusieurs mois, mais j'ai un ajout à la réponse de samccone qui est plus succincte mais je n'ai pas le Représentant à ajouter comme commentaire!

Au Lieu de:

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

Considérez:

(123456789).toString(10).split("").map(Number)
22
répondu user2521439 2014-01-02 21:36:37

Qu'en est-il de:

const n = 123456;
Array.from(n.toString()).map(Number);
// [1, 2, 3, 4, 5, 6]
17
répondu Nicolás Fantone 2017-04-23 16:49:59

const toIntArray = (n) => ([...n + ""].map(v => +v))
3
répondu Alexey Sukhikh 2017-11-11 08:30:36

Voici une alternative à la réponse deNicolás Fantone . Vous pourriez dire que c'est peut-être un peu moins lisible. L'accent est mis sur un Tableau.from () peut prendre une fonction map optionnelle comme paramètre. Il y a des gains de performance de cette façon car aucun tableau intermédiaire n'est créé.

const n = 123456;
Array.from(n.toString(), (val) => Number(val)); // [1, 2, 3, 4, 5, 6]
1
répondu PDub 2018-04-10 04:40:11

Modifié la réponse ci-dessus un peu. Nous n'avons pas vraiment besoin d'appeler explicitement la méthode 'map', car elle est déjà intégrée dans le ' Array.de ' comme un deuxième argument. À partir de MDN .

Tableau.de(arrayLike [, mapFn [, thisArg]])

let num = 1234;
let arr = Array.from(String(num), Number);
console.log(arr); // [1, 2, 3, 4]
1
répondu Alexander 2018-08-05 00:19:43

Déplacer:

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

Ci-Dessus

var j = k / 10;
0
répondu matthewk 2012-03-28 19:49:51
var num = 123456789;
num = num.toString(); //'123456789'
var digits = num.split(""); //[ '1', '2', '3', '4', '5', '6', '7', '8', '9' ]
0
répondu Dulaj Chathuranga 2017-05-23 13:31:36

Cela fait plus de 5 ans pour cette question, mais il est toujours le bienvenu dans les moyens efficaces de codage/script.

var n = 123456789;
var arrayN = (`${n}`).split("").map(e => parseInt(e))
0
répondu Sanjay Shr 2018-03-06 09:31:26

Une autre méthode ici. Comme number en Javascript N'est pas splittable par défaut, vous devez d'abord convertir le nombre en chaîne.

var n = 123;
n.toString().split('').map(Number);
0
répondu Jungdo Lee 2018-08-17 13:06:31