20

如何在 Javascript 中以与 PHP(数组)相同的方式将字符串转换为数组。

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

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

4

12 回答 12

39

哈克,但有效:

[].concat(arrayOrString);

//Usage:
[].concat("a");
//["a"]
[].concat(["a"]);
//["a"]
于 2013-09-27T19:36:10.317 回答
26

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

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

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

在 PHP 中,如果您对字符串进行检查,例如 (ex: $array = 'string';):

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

等效的 JavaScript 将是

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

如果您的变量arr不一定是字符串,您可以使用instanceof

arr = arr instanceof Array ? arr : [arr];
于 2012-10-27T18:29:23.383 回答
7
var str    = "string";
var array  = str.split('');

console.log(array); // ['s', 't', 'r', 'i','n','g']
于 2012-10-27T18:27:32.350 回答
4

你可以在 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
于 2013-08-08T09:03:17.883 回答
3

将字符串转换为数组:

var myString = "['boop','top','foo']";
var myArray = JSON.parse(myString)
于 2015-03-18T22:36:39.327 回答
1

就这样做

"sample".split("");

你会得到

["s", "a", "m", ...]
于 2012-10-27T18:32:15.530 回答
0

您不能在 JS 中强制转换为 Array,但一个简单的三元运算可以完成您想要的操作。

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

这适用于任何非数组对象或任何原始值。如果您确定此处只能遇到实际Array对象和string基元,则以下方法会更快一些:

var arr = (typeof str === 'string') ? [ str ] : str;
于 2012-10-27T18:29:02.950 回答
0
"1,2,3".split(",") 
=> ["1", "2", "3"]

使用拆分()

于 2012-10-27T18:29:07.410 回答
0

Val 的建议也适用于具有数组数组的字符串

var str = "[[1121,1],[1122,2],[1123,3]]";
var arr = $.parseJSON(str);
console.log(arr); //returns array of arrays
于 2013-09-25T18:48:56.980 回答
0

您还可以使用以下 if 语句:

if(array instanceof Array != true) {array = [array];}
于 2017-11-28T10:14:38.943 回答
0
Array.isArray(foo) || (foo = [foo]);

或者如果那不舒服

foo = Array.isArray(foo) ? foo : [foo];
于 2021-12-11T17:20:26.940 回答
-1

已经有一个提案Array.flatten()可以用于babel-preset-stage-2.

const array = ['foo'].flatten()
console.log(array) // ['foo']

const array = [['foo', 'bar']].flatten()
console.log(array) // ['foo', 'bar']

于 2018-03-25T21:24:26.620 回答