Edit: sans me donner trop de réponse sur la façon dont je peux le faire dans une boucle for. Pourriez-vous me donner la logique / pseudocode sur la façon d'y parvenir? la seule partie où je suis coincé est, ok je sais que je dois prendre le premier numéro d'index et y ajouter des zéros array.length-1 (2 zéros), mais je ne sais pas quand il arrive au dernier index, dois-je mettre une instruction if dans la boucle for?

Dans l'exemple ci-dessous, 459 serait placé dans un tableau [4,5,9]

Maintenant, je veux prendre 4 ajouter deux zéros à la fin car il a deux nombres après dans le tableau

Ensuite, je veux prendre 5 et y ajouter un zéro car il y a un numéro après dans le tableau.

Alors 9 n'aurait pas de zéros ajoutés car il n'y a pas de chiffres après.

La production finale serait donc de 400,50,9

Comment puis-je y parvenir au mieux?

var num=459;

var nexint=num.toString().split("");

var finalint=nexint.map(Number);
var nextarr=[];
-2
user2763557 12 avril 2018 à 19:31

4 réponses

Meilleure réponse

OP a demandé une solution utilisant des boucles dans un commentaire ci-dessus. Voici une approche avec des boucles:

var num = 459
var numArray = num.toString().split('');
var position = numArray.length - 1;
var finalArray = [];
var i;
var j;
for(i = 0; i < numArray.length; i++) {
  finalArray.push(numArray[i]);
  for(j = 0; j < position; j++) {
    finalArray.push(0);
  }
  position--;
}
console.log(finalArray);

Le flux général

Faites une boucle sur le tableau d'origine et à chaque passage:

  • Poussez l'élément vers le tableau final
  • Poussez ensuite X nombre de zéros dans le tableau final. X est déterminé par la position de l'élément dans le tableau d'origine, donc si le tableau d'origine a 3 éléments, le premier élément devrait avoir 2 zéros après lui. Cela signifie que X est la longueur du tableau d'origine - 1 lors de la première passe.
  • Ajustez la variable qui suit le nombre de zéros à ajouter avant d'effectuer le prochain passage dans la boucle.
1
devlin carnate 12 avril 2018 à 17:02

Ceci est similaire à l'implémentation de @ OccamsRazor, mais avec une API légèrement différente, et présenté pour une meilleure lisibilité:

const toParts = n => String(n)
  .split('')
  .map((d, i, a) => d.padEnd(a.length - i, '0'))
  .map(Number)

console.log(toParts(459))
0
Scott Sauyet 12 avril 2018 à 16:59

Vous pouvez utiliser Array#reduce et Array#map pour les valeurs multipliées par 10 et retourne un nouveau tableau.

var num = 459,
    result = [...num.toString()].reduce((r, a) => r.map(v => 10 * v).concat(+a), []);
    
console.log(result);
2
Nina Scholz 12 avril 2018 à 17:16

Vous devez utiliser la méthode de répétition de chaîne.

var num=459;
var a = (""+num).split('').map((c,i,a)=>c+"0".repeat(a.length-i-1))
console.log(a);

Voici une autre solution possible en utilisant une boucle.

var num = 459;
var a = ("" + num).split('');
var ar = [];
for (var i = 0; i < a.length; i++) {
  var str = a[i];
  str += "0".repeat(a.length-i-1);
  ar.push(str);
}
console.log(ar);
2
I wrestled a bear once. 12 avril 2018 à 16:54