我怎样能从一个字符串中获取字符数组?

484
如何在JavaScript中将字符串转换为字符数组?
我想获取一个像"Hello world!"这样的字符串,并将其转换为数组
['H','e','l','l','o','','w','o','r','l','d','!']
15个回答

3
一个简单的答案:

let str = 'this is string, length is >26';

console.log([...str]);


2
-1; 这并没有添加任何不在hakatashi的答案中的内容。 - Mark Amery

3
你可以迭代字符串的长度并将每个位置上的字符推入数组中:

(参考该链接

const str = 'Hello World';

const stringToArray = (text) => {
  var chars = [];
  for (var i = 0; i < text.length; i++) {
    chars.push(text[i]);
  }
  return chars
}

console.log(stringToArray(str))


3
虽然这种方法比声明式更加命令式,但它是本主题中最高效的方法,并且值得更多的关注。在按位置获取字符串中的字符时,有一个限制,即处理Unicode中超出基本多语言平面(如表情符号)的字符时。例如 "".charAt(0) 将返回一个无法使用的字符。 - KyleMit
2
@KyleMit 这只对于短输入有效。使用更长的输入使.split("")再次成为最快的选择 - Lux
1
另外,似乎在Firefox中对.split("")进行了大量优化。虽然循环在Chrome和Firefox中具有类似的性能,但是对于小型和大型输入,Firefox中的split速度显着更快。 - Lux
这种方法不适用于多字节字符!尝试使用 str = '',它会出错。 - Arnis Juraga

-1
使用这个:
function stringToArray(string) {
  let length = string.length;
  let array = new Array(length);
  while (length--) {
    array[length] = string[length];
  }
  return array;
}

@KyleMit 这似乎比使用 for i 循环和 push 更快 https://jsperf.com/string-to-character-array/3 - msand

-1

Array.prototype.slice 也可以完成这项工作。

const result = Array.prototype.slice.call("Hello world!");
console.log(result);


-2

一种可能性是下面这个:

console.log([1, 2, 3].map(e => Math.random().toString(36).slice(2)).join('').split('').map(e => Math.random() > 0.5 ? e.toUpperCase() : e).join(''));

这与问题有什么关联? - Sebastian Simon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接