var s = "overpopulation";
var ar = [];
ar = s.split();
alert(ar);
Je veux string.split un mot dans un tableau de caractères.
Le code ci-dessus ne semble pas fonctionner - il renvoie la "surpopulation" sous la forme d'un objet.
Comment puis-je le scinder en tableau de caractères, si la chaîne d'origine ne contient pas de virgules et d'espaces?
Vous pouvez diviser sur une chaîne vide:
var chars = "overpopulation".split('');
Si vous voulez juste accéder à une chaîne de façon tableau, vous pouvez le faire sans split
:
var s = "overpopulation";
for (var i = 0; i < s.length; i++) {
console.log(s.charAt(i));
}
Vous pouvez également accéder à chaque caractère avec son index en utilisant la syntaxe de tableau normale. Notez cependant que les chaînes sont immuables, ce qui signifie que vous ne pouvez pas définir la valeur d'un caractère utilisant cette méthode et qu'il n'est pas pris en charge par IE7 (si cela vous concerne toujours).
var s = "overpopulation";
console.log(s[3]); // logs 'r'
Vieille question mais il faut que je vous prévienne:
.split('')
Vous obtiendrez des résultats étranges avec les jeux de caractères non-BMP (non-Basic-Multilingual-Plane).
La raison en est que des méthodes telles que .split()
et .charCodeAt()
ne respectent que les caractères dont le point de code est inférieur à 65536; bec. Les points de code supérieurs sont représentés par une paire de (valeur inférieure) " de substitution "pseudo-caractères.
'????????????'.length // —> 6
'????????????'.split('') // —> ["�", "�", "�", "�", "�", "�"]
'????'.length // —> 2
'????'.split('') // —> ["�", "�"]
En utilisant l'opérateur spread :
let arr = [...str];
Ou Array.from
let arr = Array.from(str);
Ou split
avec le nouveau drapeau u
RegExp:
let arr = str.split(/(?!$)/u);
Exemples:
[...'????????????'] // —> ["????", "????", "????"]
[...'????????????'] // —> ["????", "????", "????"]
Je suis venu avec cette fonction qui utilise en interne exemple MDN pour obtenir le point de code correct de chaque caractère.
function stringToArray() {
var i = 0,
arr = [],
codePoint;
while (!isNaN(codePoint = knownCharCodeAt(str, i))) {
arr.Push(String.fromCodePoint(codePoint));
i++;
}
return arr;
}
Cela nécessite fonction knownCharCodeAt()
et pour certains navigateurs; un String.fromCodePoint()
polyfill.
if (!String.fromCodePoint) {
// ES6 Unicode Shims 0.1 , © 2012 Steven Levithan , MIT License
String.fromCodePoint = function fromCodePoint () {
var chars = [], point, offset, units, i;
for (i = 0; i < arguments.length; ++i) {
point = arguments[i];
offset = point - 0x10000;
units = point > 0xFFFF ? [0xD800 + (offset >> 10), 0xDC00 + (offset & 0x3FF)] : [point];
chars.Push(String.fromCharCode.apply(null, units));
}
return chars.join("");
}
}
Exemples:
stringToArray('????????????') // —> ["????", "????", "????"]
stringToArray('????????????') // —> ["????", "????", "????"]
Remarque : str[index]
(ES5) et str.charAt(index)
renverront également des résultats étranges avec des jeux de caractères non-BMP. par exemple. '????'.charAt(0)
renvoie "�"
.
UPDATE: Lisez ceci Bel article sur JS et Unicode.
C'est aussi simple que:
s.split("");
Le délimiteur est une chaîne vide, il se séparera donc entre chaque caractère.
La méthode split () en javascript accepte deux paramètres: un séparateur et une limite. Le séparateur spécifie le caractère à utiliser pour fractionner la chaîne. Si vous ne spécifiez pas de séparateur, la chaîne entière est renvoyée, non séparée. Toutefois, si vous spécifiez la chaîne vide en tant que séparateur, la chaîne est divisée entre chaque caractère.
Donc:
s.split('')
aura l'effet que vous recherchez.
Plus d'informations ici
.split ('') diviserait les emojis en deux.
Solutions Onur et le travail proposé par regex pour certains emojis, mais ne peut pas gérer des langages plus complexes ou des emojis combinés. Considérez cet emoji en ruine:
[..."????️????"] // returns ["????", "️", "", "????"] instead of ["????️????"]
Considérez également ce texte hindi "" qui est divisé comme suit:
[..."अनुच्छेद"] // returns ["अ", "न", "ु", "च", "्", "छ", "े", "द"]
mais devrait en fait être divisé comme ceci:
["अ","नु","च्","छे","द"]
parce que certains caractères combinent des marques (pensez diacritiques/accents dans les langues européennes).
Vous pouvez utiliser la bibliothèque grapheme-splitter pour cela:
https://github.com/orling/grapheme-splitter
La lettre est divisée en plusieurs normes dans des centaines de cas exotiques - oui, il y en a beaucoup.
Vous pouvez utiliser l'expression régulière /(?!$)/
:
"overpopulation".split(/(?!$)/)
L'assertion de recherche négative (?!$)
correspondra devant chaque caractère.
Une chaîne en Javascript est déjà un tableau de caractères.
Vous pouvez simplement accéder à n'importe quel caractère du tableau comme à n'importe quel autre tableau.
var s = "overpopulation";
alert(s[0]) // alerts o.
UPDATE
Comme indiqué dans les commentaires ci-dessous, la méthode ci-dessus pour accéder à un caractère dans une chaîne fait partie de ECMAScript 5, auquel certains navigateurs peuvent ne pas se conformer.
Une autre méthode que vous pouvez utiliser est charAt(index)
.
var s = "overpopulation";
alert(s.charAt(0)) // alerts o.
Pour soutenir les emojis, utilisez ceci
('Dragon ????').split(/(?!$)/u);
=> ['D', 'r', 'a', 'g', 'o', 'n', ' ', '????']