Comment convertir une chaîne en un tableau de caractères en JavaScript?
Je pense obtenir une chaîne comme "Hello world!"
dans le tableau
['H','e','l','l','o',' ','w','o','r','l','d','!']
javascript
arrays
string
DarkLightA
la source
la source
"𨭎".split('')
résulte en["�", "�"]
."randomstring".length;
//12
"randomstring"[2];
//"n"
str.length
ne vous indique pas le nombre de caractères dans la chaîne, car certains caractères prennent plus d'espace que d'autres;str.length
vous indique le nombre de nombres 16 bits.Comme hippie trail suggère , la réponse de Meder peut briser les paires de substitution et mal interpréter « caractères. » Par exemple:
Je suggère d'utiliser l'une des fonctionnalités ES2015 suivantes pour gérer correctement ces séquences de caractères.
Spread syntax ( déjà répondu par insertusernamehere)
Array.from
u
Drapeau RegExpUtilisez
/(?=[\s\S])/u
au lieu de/(?=.)/u
car.
ne correspond pas aux sauts de ligne .Si vous êtes encore à l'ère ES5.1 (ou si votre navigateur ne gère pas correctement cette expression régulière - comme Edge), vous pouvez utiliser cette alternative (transposée par Babel ):
Notez que Babel essaie également de gérer correctement les substituts inégalés. Cependant, cela ne semble pas fonctionner pour les substituts bas inégalés.
Testez tout dans votre navigateur:
Afficher l'extrait de code
la source
🏳️🌈
, et divise la combinaison de signes diacritiques et de caractères. Si vous souhaitez diviser en grappes de graphèmes au lieu de caractères, voir stackoverflow.com/a/45238376 .La
spread
syntaxeVous pouvez utiliser la syntaxe répartie , un initialiseur de tableau introduit dans la norme ECMAScript 2015 (ES6) :
Exemples
Les trois premiers résultats:
Le dernier se traduit par
Prise en charge du navigateur
Vérifiez le tableau de compatibilité ECMAScript ES6 .
Lectures complémentaires
spread
est également référencé comme "splat
" (par exemple en PHP ou Ruby ou "scatter
" (par exemple en Python ).Démo
Essayez avant d'acheter
la source
Vous pouvez également utiliser
Array.from
.Cette méthode a été introduite dans ES6.
Référence
Array.from
la source
C'est une vieille question mais je suis tombé sur une autre solution non encore listée.
Vous pouvez utiliser la fonction Object.assign pour obtenir la sortie souhaitée:
Pas nécessairement vrai ou faux, juste une autre option.
Object.assign est bien décrit sur le site MDN.
la source
Array.from("Hello, world")
.[..."Hello, world"]
C'est déjà:
Ou pour une version plus ancienne compatible avec les navigateurs, utilisez:
la source
alert("Hello world!" == ['H','e','l','l','o',' ','w','o','r','l','d'])
mystring.charAt(index)
.charAt()
bien que je préfère utiliser la variante array-ish. Darn IE.Il y a (au moins) trois choses différentes que vous pourriez concevoir comme un "personnage", et par conséquent, trois catégories différentes d'approche que vous pourriez vouloir utiliser.
Division en unités de code UTF-16
Les chaînes JavaScript ont été à l'origine inventées en tant que séquences d'unités de code UTF-16, à un moment de l'histoire où il y avait une relation un à un entre les unités de code UTF-16 et les points de code Unicode. La
.length
propriété d'une chaîne mesure sa longueur en unités de code UTF-16, et lorsque vous le faites,someString[i]
vous obtenez la i ème unité de code UTF-16 desomeString
.Par conséquent, vous pouvez obtenir un tableau d'unités de code UTF-16 à partir d'une chaîne en utilisant une boucle for de style C avec une variable d'index ...
Il existe également plusieurs méthodes rapides pour réaliser la même chose, comme l'utilisation
.split()
de la chaîne vide comme séparateur:Cependant, si votre chaîne contient des points de code composés de plusieurs unités de code UTF-16, cela les divisera en unités de code individuelles, ce qui peut ne pas être ce que vous voulez. Par exemple, la chaîne
'𝟘𝟙𝟚𝟛'
est composée de quatre points de code Unicode (points de code 0x1D7D8 à 0x1D7DB) qui, en UTF-16, sont chacun constitués de deux unités de code UTF-16. Si nous divisons cette chaîne en utilisant les méthodes ci-dessus, nous obtiendrons un tableau de huit unités de code:Division en points de code Unicode
Donc, peut-être que nous voulons plutôt diviser notre chaîne en points de code Unicode! Cela a été possible depuis que ECMAScript 2015 a ajouté le concept d'un itérable au langage. Les chaînes sont désormais itérables, et lorsque vous les parcourez (par exemple avec une
for...of
boucle), vous obtenez des points de code Unicode, pas des unités de code UTF-16:Nous pouvons raccourcir cela en utilisant
Array.from
, qui itère sur l'itérable qu'il est passé implicitement:Cependant, les points de code unicode ne sont pas la plus grande chose qui pourrait peut - être considéré comme un « caractère » soit . Voici quelques exemples de choses qui pourraient raisonnablement être considérées comme un seul "caractère", mais être constituées de plusieurs points de code:
Nous pouvons voir ci-dessous que si nous essayons de convertir une chaîne avec de tels caractères en un tableau via le mécanisme d'itération ci-dessus, les caractères finissent par être décomposés dans le tableau résultant. (Si aucun des caractères ne s'affiche sur votre système,
yourString
ci - dessous se compose d'un A majuscule avec un accent aigu, suivi du drapeau du Royaume-Uni, suivi d'une femme noire.)Si nous voulons conserver chacun de ces éléments comme un seul élément dans notre tableau final, nous avons besoin d'un tableau de graphèmes , pas de points de code.
Division en graphèmes
JavaScript n'a pas de support intégré pour cela - du moins pas encore. Nous avons donc besoin d'une bibliothèque qui comprend et implémente les règles Unicode pour quelle combinaison de points de code constitue un graphème. Heureusement, il en existe un: le grapheme-splitter d' Orling . Vous voudrez l'installer avec npm ou, si vous n'utilisez pas npm, télécharger le fichier index.js et le servir avec une
<script>
balise. Pour cette démo, je vais le charger depuis jsDelivr.graphème-séparateur nous donne une
GraphemeSplitter
classe avec trois méthodes:splitGraphemes
,iterateGraphemes
etcountGraphemes
. Naturellement, nous voulonssplitGraphemes
:Et nous y sommes - un tableau de trois graphèmes, ce qui est probablement ce que vous vouliez.
la source
Vous pouvez parcourir la longueur de la chaîne et pousser le caractère à chaque position :
la source
"😃".charAt(0)
rendra un personnage inutilisable.split("")
nouveau l'option la plus rapide.split("")
Semble également être fortement optimisé dans Firefox. Alors que la boucle a des performances similaires dans Chrome, la séparation de Firefox est nettement plus rapide dans Firefox pour les petites et grandes entrées.réponse simple:
la source
Une possibilité est la suivante:
la source
Que dis-tu de ça?
la source
Array.prototype.slice fera également le travail.
la source