在 JavaScript 中如何将字符串转换为字符数组?
我想得到一个像"Hello world!"
数组一样的字符串
['H','e','l','l','o',' ','w','o','r','l','d','!']
在 JavaScript 中如何将字符串转换为字符数组?
我想得到一个像"Hello world!"
数组一样的字符串
['H','e','l','l','o',' ','w','o','r','l','d','!']
注意:这不符合 Unicode。
"I💖U".split('')
导致 4 个字符的数组["I", "�", "�", "u"]
,这可能会导致危险的错误。有关安全的替代方案,请参阅下面的答案。
只需将其拆分为空字符串即可。
var output = "Hello world!".split('');
console.log(output);
正如hippietrail 所暗示的那样,meder 的回答可以打破代理对并误解“字符”。例如:
// DO NOT USE THIS!
const a = '𝟘𝟙𝟚𝟛'.split('');
console.log(a);
// Output: ["�","�","�","�","�","�","�","�"]
我建议使用以下 ES2015 特性之一来正确处理这些字符序列。
const a = [...'𝟘𝟙𝟚𝟛'];
console.log(a);
const a = Array.from('𝟘𝟙𝟚𝟛');
console.log(a);
u
标志const a = '𝟘𝟙𝟚𝟛'.split(/(?=[\s\S])/u);
console.log(a);
使用/(?=[\s\S])/u
而不是/(?=.)/u
因为.
不匹配换行符。如果你还在 ES5.1 时代(或者你的浏览器不能正确处理这个正则表达式——比如 Edge),你可以使用以下替代方案(由Babel转译)。请注意,Babel 也尝试正确处理不匹配的代理。但是,这似乎不适用于无与伦比的低代理。
const a = '𝟘𝟙𝟚𝟛'.split(/(?=(?:[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]))/);
console.log(a);
const s = '𝟘𝟙𝟚𝟛';
const a = [];
for (const s2 of s) {
a.push(s2);
}
console.log(a);
该spread
语法
您可以使用扩展语法,即ECMAScript 2015 (ES6) 标准中引入的数组初始值设定项:
var arr = [...str];
例子
function a() {
return arguments;
}
var str = 'Hello World';
var arr1 = [...str],
arr2 = [...'Hello World'],
arr3 = new Array(...str),
arr4 = a(...str);
console.log(arr1, arr2, arr3, arr4);
前三个结果是:
["H", "e", "l", "l", "o", " ", "W", "o", "r", "l", "d"]
最后一个结果是
{0: "H", 1: "e", 2: "l", 3: "l", 4: "o", 5: " ", 6: "W", 7: "o", 8: "r", 9: "l", 10: "d"}
浏览器支持
进一步阅读
spread
也称为“ splat
”(例如在PHP或Ruby 中或称为“ scatter
”(例如在Python 中)。
演示
这是一个老问题,但我遇到了另一个尚未列出的解决方案。
您可以使用 Object.assign 函数来获得所需的输出:
var output = Object.assign([], "Hello, world!");
console.log(output);
// [ 'H', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!' ]
不一定对或错,只是另一种选择。