将带逗号的字符串转换为数组


364

如何将字符串转换为JavaScript数组?

看一下代码:

var string = "0,1";
var array = [string];
alert(array[0]);

在这种情况下,alert将弹出一个0,1。当它是一个数组时,它将弹出一个0,而当alert(array[1]);它被调用时,它应该弹出1

是否有机会将此类字符串转换为JavaScript数组?


根据您希望这样做的原因,字符串和数组已经非常相似(即string[0] === '0'在您的问题中),在大多数情况下,您可以将字符串视为字符数组,并在其上使用数组方法。
Paul S.

@PaulS .:那将在IE8及更低版本中失败
我讨厌懒惰的2012年


支持所有类型的字符串的最佳实践。看到这里stackoverflow.com/a/32657055/2632619
Andi AR

Answers:


667

对于像这样的简单数组成员,可以使用JSON.parse

var array = JSON.parse("[" + string + "]");

这为您提供了一个数字数组。

[0, 1]

如果使用.split(),则会得到一个字符串数组。

["0", "1"]

请注意,这JSON.parse将限制您使用受支持的数据类型。如果您需要类似undefined或函数的值,则需要使用eval()或JavaScript解析器。


如果您想使用.split(),但也想要一个数字数组,则可以使用Array.prototype.map,尽管您需要对IE8和更低版本进行填充,或者仅编写传统循环。

var array = string.split(",").map(Number);

4
另请注意,JSON.parse();在IE6,IE7中不可用。我认为在这种情况下String.split(',');比较容易。
scunliffe 2012年

@scunliffe:的确,需要填充片,或者可以采用jQuery方法对其进行填充var array = (new Function("return [" + string + "];"))()。使用.split()是正常的,如果不需要数字,否则你需要映射的结果。
我讨厌懒惰的2012年

10
@Downvoter:尝试描述答案出了什么问题,以便我可以证明你错了。
我讨厌懒惰的2012年

@I Hate Lazy这不支持对象字符串。请参见此处stackoverflow.com/a/32657055/2632619
Andi AR

@FarzadYZ请谨慎使用(使用eval)。如果数组包含来自客户端输入的值,这将是不安全的。
威尔特


86

这在ES6中很容易实现;

您可以使用Array.from('string')将字符串转换为Arrays ;

Array.from("01")

将console.log

['0', '1']

正是您要找的东西。


1
这太棒了。我将自己的代码从JSON.parse移至Array.from,照常使用ES6。谢谢Ray Kim
Eshwar Prasad Yaddanapudi 2016年

console.log(数据类型); // string ========== var myArray = Array.from(Data); ============ console.log(typeof myArray); //对象不支持属性或方法“ from” ===========为什么?
Janatbek Sharsheyev '17

1
但是Array.from("0, 1, 233")会回来吗["0", ",", " ", "1", ",", " ", "2", "3", "3"],如果我想要[0, 1, 233] 呢?
蒂娜·陈

17
这会将每个单个字符转换为数组元素。但是我们只需要用逗号分隔的字符串作为数组元素即可。因此不是有效的解决方案。
爱迪生D'souza

1
仅当参数为Set字符串a时,此方法才可靠。
乔什·哈布达斯

57

如果字符串已经是列表格式,则可以使用JSON.parse:

var a = "['a', 'b', 'c']";
a = a.replace(/'/g, '"');
a = JSON.parse(a);

24

转换所有类型的字符串

var array = (new Function("return [" + str+ "];")());



var string = "0,1";

var objectstring = '{Name:"Tshirt", CatGroupName:"Clothes", Gender:"male-female"}, {Name:"Dress", CatGroupName:"Clothes", Gender:"female"}, {Name:"Belt", CatGroupName:"Leather", Gender:"child"}';

var stringArray = (new Function("return [" + string+ "];")());

var objectStringArray = (new Function("return [" + objectstring+ "];")());

JSFiddle https://jsfiddle.net/7ne9L4Lj/1/

结果进入控制台

在此处输入图片说明

一些练习不支持对象字符串

- JSON.parse("[" + string + "]"); // throw error

 - string.split(",") 
// unexpected result 
   ["{Name:"Tshirt"", " CatGroupName:"Clothes"", " Gender:"male-female"}", "      {Name:"Dress"", " CatGroupName:"Clothes"", " Gender:"female"}", " {Name:"Belt"",    " CatGroupName:"Leather"", " Gender:"child"}"]

我也使用过它的强大功能,但不幸的是,它不适用于字符串或符号:例如“ 0,s”,如何解决该问题的任何想法?
sqp_125 '17

1
@ sqp_125尝试0,是吗?
真实感'17

19

对于像这样的简单数组成员,可以使用JSON.parse。

var listValues = "[{\"ComplianceTaskID\":75305,\"RequirementTypeID\":4,\"MissedRequirement\":\"Initial Photo Upload NRP\",\"TimeOverdueInMinutes\":null}]";

var array = JSON.parse("[" + listValues + "]");

这为您提供了一个数字数组。

现在您的变量值就像array.length = 1

价值输出

array[0].ComplianceTaskID
array[0].RequirementTypeID
array[0].MissedRequirement
array[0].TimeOverdueInMinutes


16

使用ES6的另一个选项是使用Spread语法。

var convertedArray = [..."01234"];

var stringToConvert = "012";
var convertedArray  = [...stringToConvert];
console.log(convertedArray);


2
太棒了!与Array.from答案一起,它们应该是ES6解决方案的唯一答案。
Artyom Pranovich

10

使用内置地图功能和匿名功能,如下所示:

string.split(',').map(function(n) {return Number(n);});

[编辑]这是您将如何使用它

var string = "0,1";
var array = string.split(',').map(function(n) {
    return Number(n);
});
alert( array[0] );

1
这是最普遍适用的答案。JSON不能用于任意定界符(例如,制表符,空格等)
javadba

当您的数组值是可能带有逗号的字符串值时,这将不起作用。例如:"123, 'a string with a , comma', 456"。您可以使用更复杂的正则表达式来正确处理此类情况(例如此处建议的内容)。
威尔特

@Wilt好吧,它不会,但是是的,您可以使用正则表达式来解决此问题
Dan Mantyla

1
我并不是要批评您的答案,而是写这篇文章是因为我使用了您的解决方案并亲自遇到了这个问题。考虑将评论留给其他人,可能会遇到类似的问题。
威尔特

3

下面有更多“尝试一下”示例。

定义和用法split()方法用于将字符串拆分为子字符串数组,并返回新数组。

提示:如果将空字符串(“”)用作分隔符,则该字符串将在每个字符之间分割。

注意:split()方法不会更改原始字符串。

var res = str.split(",");

3

您可以使用javascript Spread语法将字符串转换为数组。在下面的解决方案中,我删除了逗号,然后将字符串转换为数组。

var string = "0,1"
var array = [...string.replace(',', '')]
console.log(array[0])

2

如何在JavaScript中将逗号分隔的字符串转换为数组?

var string = 'hello, world, test, test2, rummy, words';
var arr = string.split(', '); // split string on comma space
console.log( arr );

//Output
["hello", "world", "test", "test2", "rummy", "words"]

有关使用以下方法在javascript中将字符串转换为数组的更多示例:

  1. Split()–无分隔符:
  2. Split()–空字符串分隔符:
  3. Split()–开头/结尾处的分隔符:
  4. 正则表达式分隔符:
  5. 捕获括号:
  6. 具有限制参数的Split()

    查看此链接==> https://www.tutsmake.com/javascript-convert-string-to-array-javascript/



0

Split(“,”)可以将带逗号的字符串转换为String数组,这是我的代码段。

    var input ='Hybrid App, Phone-Gap, Apache Cordova, HTML5, JavaScript, BootStrap, JQuery, CSS3, Android Wear API'
    var output = input.split(",");
    console.log(output);

[“混合应用程序”,“电话间隙”,“ Apache Cordova”,“ HTML5”,“ JavaScript”,“ BootStrap”,“ JQuery”,“ CSS3”,“ Android Wear API”]


0

var i = "[{a:1,b:2}]",
    j = i.replace(/([a-zA-Z0-9]+?):/g, '"$1":').replace(/'/g,'"'),
    k = JSON.parse(j);

console.log(k)

// =>声明正则表达式

[a-zA-Z0-9] =>匹配所有az,AZ,0-9

(): =>将所有匹配的元素分组

$ 1 =>替换字符串引用正则表达式中的第一个匹配组。

g =>全局标志


0

使用示例Array.filter

var str = 'a,b,hi,ma,n,yu';

var strArr = Array.prototype.filter.call(str, eachChar => eachChar !== ',');

-1

为什么不替换,逗号和这样split('')的字符串,将其转换为['0', '1'],此外,您可以将结果包装成parseInt()并将元素转换为整数类型。

it('convert string to array', function () {
  expect('0,1'.replace(',', '').split('')).toEqual(['0','1'])
});
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.