95 votes

convertir une chaîne de caractères en un tableau d'entiers

Je veux convertir la chaîne suivante '14 2' dans un tableau de deux entiers. Comment puis-je le faire ?

222voto

xer0x Points 3507

Un rapide pour les navigateurs modernes :

'14 2'.split(' ').map(Number);

// [14, 2]`

90voto

Nick Craver Points 313913

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); }

37voto

Todd Points 612

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 !

27voto

amillara Points 184
var result = "14 2".split(" ").map(function(x){return parseInt(x)});

5voto

Yann Rolland Points 93

Une alternative à la réponse de Tushar Gupta serait :

'14 2'.split(' ').map(x=>+x);

// [14, 2]`

Dans le code golf, vous économisez 1 caractère. Ici le "+" est l'opérateur "unary plus", il fonctionne comme parseInt.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X