将带逗号的字符串转换为数组
Posted
技术标签:
【中文标题】将带逗号的字符串转换为数组【英文标题】:Convert string with commas to array 【发布时间】:2012-10-27 16:01:18 【问题描述】:如何将字符串转换为 javascript 数组?
看代码:
var string = "0,1";
var array = [string];
alert(array[0]);
在这种情况下,alert
会弹出一个0,1
。当它是一个数组时,它会弹出一个0
,当调用alert(array[1]);
时,它应该弹出1
。
有没有机会将这样的字符串转换成 JavaScript 数组?
【问题讨论】:
根据你想要这个的原因,字符串和数组已经非常相似(即你的问题中的string[0] === '0'
),在大多数情况下,你可以将字符串视为字符数组并在其上使用数组方法.
@PaulS.:这将在 IE8 及更低版本中失败。
convert javascript comma separated string into an array的可能重复
支持所有类型字符串的最佳实践。见这里***.com/a/32657055/2632619
【参考方案1】:
正则表达式
作为split
更强大的替代品,您可以使用match
"0,1".match(/\d+/g)
let a = "0,1".match(/\d+/g)
console.log(a);
【讨论】:
【参考方案2】:您可以使用 javascript Spread Syntax 将字符串转换为数组。在下面的解决方案中,我删除了逗号,然后将字符串转换为数组。
var string = "0,1"
var array = [...string.replace(',', '')]
console.log(array[0])
【讨论】:
【参考方案3】:How to Convert Comma Separated String into an Array in 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中将字符串转换为数组的示例:
Split() – 无分隔符:
Split() – 空字符串分隔符:
Split() – 开始/结束处的分隔符:
正则表达式分隔符:
捕获括号:
带有限制参数的Split()
查看此链接 ==> https://www.tutsmake.com/javascript-convert-string-to-array-javascript/
【讨论】:
【参考方案4】:使用Array.filter
的示例:
var str = 'a,b,hi,ma,n,yu';
var strArr = Array.prototype.filter.call(str, eachChar => eachChar !== ',');
【讨论】:
【参考方案5】:转换所有类型的字符串
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 try 0,'s' ?【参考方案6】:更多“亲自尝试”示例如下。
定义和用法 split() 方法用于将字符串拆分为子字符串数组,并返回新的数组。
提示:如果使用空字符串(“”)作为分隔符,则字符串在每个字符之间进行分割。
注意:split() 方法不会改变原始字符串。
var res = str.split(",");
【讨论】:
【参考方案7】:这在 ES6 中很容易实现;
您可以使用Array.from('string') 将字符串转换为数组;
Array.from("01")
将控制台.log
['0', '1']
这正是您要寻找的。p>
【讨论】:
这太棒了。我将我的代码从JSON.parse
移动到Array.from
,就像使用ES6
一样。谢谢Ray Kim
任何版本的 IE 都不支持此功能。小心
但是Array.from("0, 1, 233")
会返回["0", ",", " ", "1", ",", " ", "2", "3", "3"]
,如果我想要[0, 1, 233]
呢?
糟糕的解决方案!更多信息见https://github.com/gildata/RAIO/issues/116#issuecomment-325901359
这会将每个字符转换为数组元素。但是我们只需要逗号分隔的字符串作为数组元素。所以不是一个有效的解决方案。【参考方案8】:
我删除字符 '[',']' 并使用 ',' 进行拆分
let array = stringObject.replace('[','').replace(']','').split(",").map(String);
【讨论】:
【参考方案9】: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] => 匹配所有 a-z、A-Z、0-9
(): => 将所有匹配的元素分组
$1 => 替换字符串指的是正则表达式中的第一个匹配组。
g => 全局标志
【讨论】:
【参考方案10】:Split(",") 可以将带逗号的字符串转换成字符串数组,这是我的代码sn-p。
var input ='Hybrid App, Phone-Gap, Apache Cordova, html5, JavaScript, BootStrap, JQuery, CSS3, android Wear API'
var output = input.split(",");
console.log(output);
[“混合应用”、“Phone-Gap”、“Apache Cordova”、“HTML5”、“ JavaScript”、“BootStrap”、“JQuery”、“CSS3”、“Android Wear API”]
【讨论】:
【参考方案11】:你可以使用split
参考: http://www.w3schools.com/jsref/jsref_split.asp
"0,1".split(',')
【讨论】:
【参考方案12】:使用 ES6 的另一个选项是使用 Spread 语法。
var convertedArray = [..."01234"];
var stringToConvert = "012";
var convertedArray = [...stringToConvert];
console.log(convertedArray);
【讨论】:
太棒了!与 Array.from 答案一起,它们应该是 ES6 解决方案的唯一答案。【参考方案13】:你为什么不把,
逗号和split('')
这样的字符串替换成['0', '1']
,此外,你可以将结果包装成parseInt()
来将元素转换为整数类型。
it('convert string to array', function ()
expect('0,1'.replace(',', '').split('')).toEqual(['0','1'])
);
【讨论】:
【参考方案14】:将内置的 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] );
【讨论】:
这是最普遍适用的答案。 JSON 不能用于任意分隔符(例如制表符、空格等) 当您的数组值是可能包含逗号的字符串值时,这将不起作用。例如:"123, 'a string with a , comma', 456"
。您可以使用更复杂的正则表达式来正确处理此类情况(例如建议的here)。
@Wilt 不,它不会,但是你可以使用正则表达式来解决这个问题
我并不是要批评你的回答,但我写这个是因为我使用了你的解决方案,自己也遇到了这个问题。考虑将评论留给其他可能遇到类似问题的人。【参考方案15】:
如果字符串已经是列表格式,可以使用JSON.parse:
var a = "['a', 'b', 'c']";
a = a.replace(/'/g, '"');
a = JSON.parse(a);
【讨论】:
【参考方案16】:对于这样的简单数组成员,您可以使用 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
【讨论】:
【参考方案17】:对于这样的简单数组成员,您可以使用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);
【讨论】:
还要注意JSON.parse();
在 IE6、IE7 中不可用。我认为在这种情况下String.split(',');
更容易。
@scunliffe:确实,需要一个 shim,或者可以采用 jQuery 方法对其进行 shim var array = (new Function("return [" + string + "];"))()
。如果不需要 Numbers,则使用 .split()
是可以的,否则您需要映射结果。
@Downvoter:试着描述一下答案有什么问题,这样我就可以证明你错了。
@I Hate Lazy 这不支持对象字符串。请参阅此处***.com/a/32657055/2632619
@FarzadYZ 小心(使用eval
)。如果数组包含来自客户端输入的值,这将是不安全的。【参考方案18】:
Split ,
字符;
var string = "0,1";
var array = string.split(",");
alert(array[0]);
【讨论】:
以上是关于将带逗号的字符串转换为数组的主要内容,如果未能解决你的问题,请参考以下文章