将字符串转换为数组

23

在JavaScript中,我该如何将一个字符串转换成数组,就像PHP的(array)一样。

//PHP
$array = (array)"string"

基本上,我有一个变量可以是数组或字符串,如果是字符串,我想使用内联命令将其变成数组。


3
我不相信JavaScript中有类型转换。 - Oded
在JS中有类型转换,但很少使用(就像在PHP中一样)。常见的用法是将数字视为字符串或将字符串视为数字。如果不小心,“1”+“1”=“11”。 - Levi Botelho
1
你想把它变成什么类型的数组?应该是一个由字符串中的单个字符组成的数组吗?还是一个将整个字符串作为其第一个索引的数组? - I Hate Lazy
12个回答

41

不太正规,但是有效:

[].concat(arrayOrString);

//Usage:
[].concat("a");
//["a"]
[].concat(["a"]);
//["a"]

3
[注] 与另一种方法相比,这种方法速度较慢:http://jsperf.com/array-coerce - Metalstorm
@Metalstorm 它是以相同的方式使用吗?jsperf目前无法访问,我无法检查。 - jeromej
@JeromeJ 是的,它比较了 concatArray.isArray()。差异是显著的。 - Enrico
1
@Zim 谢谢!确实更快,但遗憾的是不够简洁:Array.isArray(obj) ? obj : [obj] - jeromej
这是我能找到的唯一解决方案,可以让我在foreach语句内将字符串属性转换为数组。([].concat(foo.bar.stringOrArray)).forEach((item) => {...}) - Kerry Johnson

29

JavaScript是一种原型语言,没有类型转换系统。

解决方案之一是检查您的变量是否为字符串并将其转换为数组。例如:

if (typeof someVariable === 'string') someVariable = [someVariable];

在PHP中,如果你对一个字符串做检查,例如(例如:$array = 'string';):

$array = (array) $array;  // ex: "string" becomes array("string")

JavaScript的等价语句将是:

arr = typeof arr === 'string' ? [arr] : arr;

如果您的变量arr不一定是字符串,您可以使用instanceof编辑:或者Array.isArray):

arr = arr instanceof Array ? arr : [arr];
arr = Array.isArray(arr) ? arr : [arr];

7
var str    = "string";
var array  = str.split('');

console.log(array); // ['s', 't', 'r', 'i','n','g']

3
在 PHP 中执行 str = (array)"string" 的结果是 array("string"),而不是 array('s','t','r','i','n','g') - Yanick Rochon
无论如何,我正在从“string”中查找 ['s','t','r','i','n','g']。谢谢。 - MrHIDEn
在 PHP 中,str_split($my_string) 的作用是将字符串拆分为字符数组。 - jeromej
如果这是你想要的(而不是 OP 所询问的),那么只需使用 Array.from(),请参阅 MDN 注释 [https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/from]。 - Tom Auger

4

You can in jQuery...

var arr = "[1,2,3,4,5]"; 
window.x = $.parseJSON(arr);
console.log(x);//cast as an array...

即使您有类似“

”这样的内容,它也可以正常工作。
[{"key":"value"}]

然而,如果你有像这样的内容,可能会导致这种方法不起作用...
[{key:"value"}] // different is the " (double quotes) on key

1
你不再需要jQuery了,JSON.parse(arr);可以达到同样的效果。 - t.mikael.d

3

将字符串转换为数组:

var myString = "['boop','top','foo']";
var myArray = JSON.parse(myString)

1

就这样做

"sample".split("");

你会得到

["s", "a", "m", ...]

如果你有这样的东西:"[10,20,34,0]",而你想要它变成:[10,20,34,0],那么你的解决方案是行不通的。 - jartaud

0

在JS中您无法将类型转换为数组,但是一个简单的三元操作可以实现您想要的功能。

var str = 'string';
var arr = (str instanceof Array) ? str : [ str ];

这适用于任何非数组对象或任何基本值。如果您确定只有实际的Array对象和string原语可以在此处遇到,则以下速度更快:

var arr = (typeof str === 'string') ? [ str ] : str;

它与 Array.isArray(str) ? str:[str] 相比如何? - jeromej
1
更新:https://dev59.com/6WEh5IYBdhLWcg3wjD_n > Array.isArray 更好一些。 - jeromej

0
"1,2,3".split(",") 
=> ["1", "2", "3"]

使用 split()函数

1
这是问题中所要求的PHP等效内容。 - Yanick Rochon

0

你也可以使用以下的if语句:

if(array instanceof Array != true) {array = [array];}

0
Array.isArray(foo) || (foo = [foo]);

或者如果这不太舒服

foo = Array.isArray(foo) ? foo : [foo];

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