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

459

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

看代码:

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

在这种情况下,alert 显示 0,1。如果它是一个数组,它将显示 0。如果调用 alert(array[1]),它应该弹出 1

有没有办法将这样的字符串转换为 JavaScript 数组?


1
根据您的需求,字符串和数组已经非常相似(例如,在您的问题中,string[0] === '0'),在大多数情况下,您可以将字符串视为字符数组并在其上使用数组方法。 - Paul S.
1
@PaulS.:在IE8及以下版本中,这将失败 - I Hate Lazy
1
可能是将JavaScript逗号分隔的字符串转换为数组的重复问题。 - Baby
1
支持所有类型字符串的最佳实践。请参见此处https://dev59.com/oGYr5IYBdhLWcg3w8-gz#32657055 - Andi AR
18个回答

803

对于这样简单的数组成员,您可以使用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);

6
请注意,JSON.parse();在IE6和IE7中不可用。我认为在这种情况下,使用String.split(',');会更容易。 - scunliffe
@scunliffe: 没错,需要一个 shim,或者可以采用 jQuery 的方法进行 shim,即 var array = (new Function("return [" + string + "];"))()。如果不需要数字,则使用 .split() 是可以的,否则您需要对结果进行 map 映射。 - I Hate Lazy
14
@Downvoter:请描述一下回答中哪里有问题,这样我就可以展示你错在哪里。 - I Hate Lazy
@我讨厌懒惰 这不支持对象字符串。请看这里https://dev59.com/oGYr5IYBdhLWcg3w8-gz#32657055 - Andi AR
string.split(','); OR for of & push - user8202629
显示剩余9条评论

160

用逗号字符将其拆分;

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

103

这在ES6中很容易实现;

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

Array.from("01")

将会使用console.log打印

['0', '1']

这正是你所寻找的。


3
太棒了!我将我的代码从JSON.parse转换成了Array.from,因为我正在使用ES6。谢谢Ray Kim - Eshwar Prasad Yaddanapudi
1
这在任何版本的IE中都不受支持。请小心。 - 29er
3
但是 Array.from("0, 1, 233") 将返回 ["0", ",", " ", "1", ",", " ", "2", "3", "3"],如果我想要 [0, 1, 233] 呢? - Tina Chen
29
这会将每个字符转换为数组元素。但我们只需要以逗号分隔的字符串作为数组元素。因此,这不是一个有效的解决方案。 - Edison D'souza
1
当参数为字符串的Set时,此方法才是可靠的。 - vhs
显示剩余3条评论

78
如果字符串已经是列表形式,您可以使用JSON.parse:
var a = "['a', 'b', 'c']";
a = a.replace(/'/g, '"');
a = JSON.parse(a);

29

转换所有类型的字符串

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
1
@sqp_125 尝试使用 0,'s'? - Unreality

23

对于这样简单的数组成员,您可以使用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

20

19

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

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

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


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

12

使用内置的map函数和匿名函数,如下所示:

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不能用于任意分隔符(例如制表符、空格等)。 - WestCoastProjects
1
当您的数组值是可能包含逗号的字符串值时,这种方法将无法正常工作。例如:"123, 'a string with a , comma', 456"。您可以使用更复杂的正则表达式来正确处理这些情况(例如像这里建议的那样)。 - Wilt
@Wilt 嗯,不会的,但是你可以使用正则表达式来解决这个问题。 - Dan Mantyla
2
我并不是要批评你的答案,而是因为我使用了你的解决方案,遇到了同样的问题。想留下评论,给其他可能遇到类似问题的人提供帮助。 - Wilt
2
可以缩写为 string.split(',').map(Number) - ya.teck

11

如何在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/


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