Je veux convertir la chaîne suivante '14 2'
dans un tableau de deux entiers. Comment puis-je le faire ?
Réponses
Trop de publicités?Vous pouvez .split()
pour obtenir un tableau de chaînes de caractères puis boucle pour les convertir en chiffres, comme ceci :
var myArray = "14 2".split(" ");
for(var i=0; i<myArray.length; i++) { myArray[i] = +myArray[i]; }
//use myArray, it's an array of numbers
Le site +myArray[i]
est juste un moyen rapide de faire la conversion des nombres, si vous êtes sûr qu'il s'agit d'entiers, vous pouvez simplement le faire :
for(var i=0; i<myArray.length; i++) { myArray[i] = parseInt(myArray[i], 10); }
Alors... un vieux sujet, je sais, mais...
EDIT
@RoccoMusolino a fait une belle prise ; voici une alternative :
TL;DR :
const intArray = [...("5 6 7 69 foo 0".split(' ').filter(i => /\d/g.test(i)))]
MAUVAIS : "5 6 note this foo".split(" ").map(Number).filter(Boolean); // [5, 6]
Il y a un défaut subtil dans les solutions les plus élégantes énumérées ici, en particulier les réponses de @amillara et @Marcus, par ailleurs magnifiques.
Le problème se produit lorsqu'un élément du tableau de chaînes de caractères n'est pas un entier, peut-être dans un cas sans validation sur une entrée. Pour un exemple artificiel...
Le problème :
var effedIntArray = "5 6 7 69 foo".split(' ').map(Number); // [5, 6, 7, 69, NaN]
Puisque vous voulez manifestement un tableau PURE int, c'est un problème. Honnêtement Je ne l'ai pas remarqué avant d'avoir copié-collé le code SO dans mon script... :/
Le site (légèrement plus faible) fixer :
var intArray = "5 6 7 69 foo".split(" ").map(Number).filter(Boolean); // [5, 6, 7, 69]
Donc, maintenant, même si vous avez une chaîne de caractères int de merde, votre sortie est un tableau d'entiers purs. Les autres sont vraiment sexy dans la plupart des cas, mais j'ai voulu offrir mon expérience, surtout décousue, de l'utilisation de la fonction w'actually . C'est quand même une phrase d'un seul trait, à mon crédit...
J'espère que cela fera gagner du temps à quelqu'un !
- Réponses précédentes
- Plus de réponses