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!
11 réponses
Pourquoi ne pas simplement faire cela?
var n = 123456789;
var digits = (""+n).split("");
(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
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)
Qu'en est-il de:
const n = 123456;
Array.from(n.toString()).map(Number);
// [1, 2, 3, 4, 5, 6]
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]
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]
var num = 123456789;
num = num.toString(); //'123456789'
var digits = num.split(""); //[ '1', '2', '3', '4', '5', '6', '7', '8', '9' ]
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))
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);