How do I split a string into an array of characters?

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

I want to string.split a word into array of characters.

The above code doesn't seem to work - it returns "overpopulation" as Object..

How do i split it into array of characters, if original string doesn't contain commas and whitespace?

347811 次浏览

可以使用正则表达式 /(?!$)/:

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

否定的前瞻断言 (?!$)将在每个字符的正前方匹配。

您可以在一个空字符串上进行拆分:

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

如果只想以类似数组的方式访问字符串,那么不需要 split:

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

还可以使用常规数组语法访问每个字符及其索引。但是,请注意,字符串是不可变的,这意味着您不能使用这种方法 准备好了字符的值,并且 IE7不支持它(如果这对您仍然很重要的话)。

var s = "overpopulation";


console.log(s[3]); // logs 'r'

这很简单:

s.split("");

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

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

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

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

更新

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

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

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

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

因此:

s.split('')

就能达到你想要的效果。

更多信息 给你

老问题了,不过我得提醒你:

不要使用 .split('')

使用 非 BMP(非基本-多语言-平面)字符集会得到奇怪的结果。

原因是像 .split().charCodeAt()这样的方法只尊重编码点低于65536的字符; bec。较高的代码点由(低值)“ 代孕妈妈”伪字符的 一对表示。

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


'😎'.length      // —> 2
'😎'.split('')   // —> ["�", "�"]

尽可能使用 ES2015(ES6)功能:

使用 传播操作符:

let arr = [...str];

或者 Array.from

let arr = Array.from(str);

或者使用新的 u 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('😎😜🙃')  // —> ["😎", "😜", "🙃"]

注意 : str[index](ES5)和 str.charAt(index)也会返回带有非 BMP 字符集的奇怪结果。

更新: 阅读关于 JS 和 unicode 的 文章不错

用这个来支持表情符号

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

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