web-dev-qa-db-fra.com

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, je reçois ceci: [9, 1, 2, 3, 4, 5, 6, 7, 8]

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

39
magnusbl

Pourquoi ne pas simplement faire ça?

var n =  123456789;
var digits = (""+n).split("");
66
(123456789).toString(10).split("")

^^ cela retournera un tableau de chaînes

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

^^ cela retournera un tableau d'ints

42
samccone

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

Au lieu de:

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

Considérer:

(123456789).toString(10).split("").map(Number)
25
user2521439

Qu'en est-il de:

const n = 123456;
Array.from(n.toString()).map(Number);
// [1, 2, 3, 4, 5, 6]
22
Nicolás Fantone

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 'Array.from' en tant que second argument . À partir de MDN .

Array.from (arrayLike [ mapFn [ thisArg]])

let num = 1234;
let arr = Array.from(String(num), Number);
console.log(arr); // [1, 2, 3, 4]
2
Alexander

Voici une alternative à la réponse de Nicolás Fantone . Vous pourriez dire que c'est peut-être un peu moins lisible. L'accent est mis sur le fait qu'Array.from () peut prendre une fonction de carte optionnelle en tant que paramètre. Il y a quelques 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
PDub

Bouge toi:

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

au dessus de

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

C'est très simple, commencez par convertir le nombre en chaîne à l'aide de la méthode toString () en JavaScript, puis utilisez la méthode split () pour convertir la chaîne en un tableau de caractères individuels.

Par exemple, le nombre est num, puis

const numberDigits = num.toString().split('');
0
Naved Ahmad

Cela fonctionnera pour un nombre supérieur à 0. Vous n'avez pas besoin de convertir le nombre en chaîne:

function convertNumberToDigitArray(number) {
    const arr = [];
    while (number > 0) {
        let lastDigit = number % 10;
        arr.Push(lastDigit);
        number = Math.floor(number / 10);
    }
    return arr;
}
0
techguy2000

Cette question a duré plus de 5 ans pour cette question, mais nous nous félicitons toujours des méthodes efficaces de codage/script.

var n = 123456789;
var arrayN = (`${n}`).split("").map(e => parseInt(e))
0
Sanjay Shr

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

var n = 123;
n.toString().split('').map(Number);
0
Jungdo Lee
let input = 12345664
const output = []
while (input !== 0) {
  const roundedInput = Math.floor(input / 10)
  output.Push(input - roundedInput * 10)
  input = roundedInput
}
console.log(output)
0
Nick

J'ai fini par le résoudre comme suit:

const n = 123456789;
let toIntArray = (n) => ([...n + ""].map(Number));
console.log(toIntArray(n));
0
Penny Liu
const number = 1435;
number.toString().split('').map(el=>parseInt(el));
0
Adam Kaczmarek