Je veux convertir la chaîne suivante '14 2'
en un tableau de deux entiers. Comment puis-je le faire ?
92
Je veux convertir la chaîne suivante '14 2'
en un tableau de deux entiers. Comment puis-je le faire ?
Vous pouvez .split()
obtenir un tableau de chaînes , puis effectuer une boucle pour les convertir en nombres, 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
C'est +myArray[i]
juste un moyen rapide de faire la conversion des nombres, si vous êtes sûr qu'il s'agit d'entiers, vous pouvez simplement faire:
for(var i=0; i<myArray.length; i++) { myArray[i] = parseInt(myArray[i], 10); }
for(var i=myArray.length; i--;) myArray[i] = myArray[i]|0;
utilisant la conversion bit à bit et une boucle plus courtemyArray.forEach(function(x,y,z){ z[y]=x|0 })
.min.js
et.js
si vous souhaitez exposer votre code ... rappelez-vous que la minification n'est pas pour l'obscurité (ou ne devrait pas l'être, car c'est à peu près inutile pour cela), c'est pour réduire la surcharge HTTP - un chargement de page plus rapide pour vos utilisateurs.Un rapide pour les navigateurs modernes:
la source
SO ... un fil plus ancien, je sais, mais ...
ÉDITER
@RoccoMusolino a eu une belle prise; voici une alternative:
TL; DR:
FAUX :
"5 6 note this foo".split(" ").map(Number).filter(Boolean); // [5, 6]
Il y a une faille subtile dans les solutions les plus élégantes énumérées ici, en particulier les belles réponses de @amillara et @Marcus.
Le problème se produit lorsqu'un élément du tableau de chaînes n'est pas de type entier, peut-être dans un cas sans validation sur une entrée. Pour un exemple artificiel ...
Le problème:
Puisque vous voulez évidemment un tableau PURE int, c'est un problème. Honnêtement , je n'ai pas compris cela avant d'avoir copié le code SO dans mon script ...: /
Le correctif (légèrement moins baller) :
Donc, maintenant même lorsque vous avez une chaîne crap int, votre sortie est un tableau d'entiers purs. Les autres sont vraiment sexy dans la plupart des cas, mais je voulais vraiment offrir ma façon de faire la plupart du temps . C'est toujours un one-liner cependant, à mon crédit ...
J'espère que cela fera gagner du temps à quelqu'un!
la source
.filter(Boolean)
par.filter( (x) => !Number.isNaN(x))
la source
parseInt()
..map
et similaires dans JS dans n'importe quel navigateur sans bibliothèques supplémentaires.Une alternative à la réponse de Tushar Gupta serait:
Dans le code golf, vous enregistrez 1 caractère. Ici, le "+" est l'opérateur "unaire plus", fonctionne comme parseInt.
la source
Commencez par diviser la chaîne sur des espaces:
Puis convertissez le tableau de chaînes de résultats en nombres entiers:
la source
parseInt()
, sinon vous pourriez y avoir des octals.0
, ou0x
ça devrait aller.Le point contre
parseInt
-approche:Il n'est pas nécessaire d'utiliser des lambdas et / ou de donner un
radix
paramètre àparseInt
, utilisez simplementparseFloat
ou à laNumber
place.Les raisons:
Ça marche:
C'est plus court.
C'est un peu plus rapide et tire parti du cache, quand
parseInt
-approach - ne :Remarque: dans Firefox
parseInt
fonctionne environ 4 fois plus vite, mais toujours plus lent que les autres. Au total:+e
<Number
<parseFloat
<parseInt
la source
Juste pour le plaisir, j'ai pensé ajouter une
forEach(f())
solution aussi.la source
la source
Meilleure solution en une ligne:
la source
nous la fonction de division :
la source