如何将一个string分割成一个字符数组?

var s = "overpopulation"; var ar = []; ar = s.split(); alert(ar); 

我想string.split一个单词字符数组。

上面的代码似乎不起作用 – 它返回“过度人口”作为对象..

如果原始string不包含逗号和空格,如何将其分解为字符数组?

你可以拆分一个空string:

 var chars = "overpopulation".split(''); 

如果你只是想以类似数组的方式访问一个string,你可以做到这一点没有split

 var s = "overpopulation"; for (var i = 0; i < s.length; i++) { console.log(s.charAt(i)); } 

您还可以使用正常的数组语法访问每个字符的索引。 但是,请注意,string是不可变的,这意味着您不能使用此方法设置字符的值,并且它不受IE7支持(如果这对您仍然重要)。

 var s = "overpopulation"; console.log(s[3]); // logs 'r' 

老问题,但我应该警告:

如上所述,如果您的目的是通过index访问字符,则可以使用str[index] (ES5)或str.charAt(index) ,而不需要转换。

编辑:如果你在意, str[index] (ES5)和str.charAt(index)也会返回奇怪的结果与非BMP的字符集。 例如'😎'.charAt(0)返回" "


不要使用.split('')

非BMP (非基本多语言平面)字符集会导致奇怪的结果。

原因是像.split().charCodeAt()这样的方法只考虑了代码点低于65536的字符; BEC。 较高的代码点由一对 (较低值)的“ 替代 ”伪字符表示。

 '𝟙𝟚𝟛'.length // —> 6 '𝟙𝟚𝟛'.split('') // —> [" ", " ", " ", " ", " ", " "] '😎'.length // —> 2 '😎'.split('') // —> [" ", " "] 

尽可能使用ES2015(ES6)function:

使用扩展运算符:

 let arr = [...str]; 

或者Array.from

 let arr = Array.from(str); 

或者用新的RegExp标志split

 let arr = str.split(/(?!$)/u; 

例子:

 [...'𝟙𝟚𝟛'] // —> ["𝟙", "𝟚", "𝟛"] [...'😎😜🙃'] // —> ["😎", "😜", "🙃"] 

对于ES5,选项是有限的:

我想出了这个函数在内部使用MDN的例子来得到每个字符的正确的代码点。

 function stringToArray() { var i = 0, arr = [], codePoint; while (!isNaN(codePoint = knownCharCodeAt(str, i))) { arr.push(String.fromCodePoint(codePoint)); i++; } return arr; } 

这需要knownCharCodeAt()函数和一些浏览器; 一个String.fromCodePoint()填充。

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

例子:

 stringToArray('𝟙𝟚𝟛') // —> ["𝟙", "𝟚", "𝟛"] stringToArray('😎😜🙃') // —> ["😎", "😜", "🙃"] 

更新:阅读这个关于JS和unicode的好文章 。

这很简单:

 s.split(""); 

分隔符是一个空string,因此它将在每个单个字符之间分解。

javascript中的split()方法接受两个参数:一个分隔符和一个限制。 分隔符指定用于分割string的字符。 如果不指定分隔符,则返回整个string,不分隔。 但是,如果将空string指定为分隔符,则string将在每个字符之间进行分隔。

因此:

 s.split('') 

会有你所寻求的效果。

更多信息在这里

你可以使用正则expression式/(?!$)/

 "overpopulation".split(/(?!$)/) 

否定的先行判断(?!$)将匹配每个angular色的前面。

Javascript中的string已经是一个字符数组。

您可以像访问其他数组一样简单地访问数组中的任何字符。

 var s = "overpopulation"; alert(s[0]) // alerts o. 

UPDATE

正如在下面的注释中指出的,上面的访问string中的字符的方法是ECMAScript 5的一部分,某些浏览器可能不符合。

可以使用的另一种方法是charAt(index)

 var s = "overpopulation"; alert(s.charAt(0)) // alerts o. 

支持emojis使用这个

 ('Dragon 🐉').split(/(?!$)/u); 

=> ['D', 'r', 'a', 'g', 'o', 'n', ' ', '🐉']

.split('')会将表情符号分成两半。

Onur的解决scheme和正则expression式的一些emojis的工作,但不能处理更复杂的语言或结合emojis。 考虑到这个表情符号被毁了:

 [..."🏳️‍🌈"] // returns ["🏳", "️", "‍", "🌈"] instead of ["🏳️‍🌈"] 

也考虑这个分裂的印地文文本“अनुच्छेद”这样:

 [..."अनुच्छेद"] // returns ["अ", "न", "ु", "च", "्", "छ", "े", "द"] 

但实际上应该像这样分裂:

 ["अ","नु","च्","छे","द"] 

因为有些字符是组合的标志(想象欧洲语言的变音符号/口音)。

你可以使用这个字形分解器库:

https://github.com/orling/grapheme-splitter

它在所有的数百个奇异的边缘情况下都做了适当的基于标准的字母拆分 – 是的,有很多。