我有一个这样的字符串:var data = "[[1, 2, 3,], [3, 2, 1]]";
我正在使用众所周知的开花函数,它期望(作为输入)这种类型的数组:[[1, 2, 3,], [3, 2, 1]], [...], [...]]
正如您所看到的,我正在尝试使用my:data
变量提供此功能,但这是当前的字符串,因此我需要将其转换为正确的类型。我知道我可以将字符串转换为这样的数组:
var input = "1, 2, 3";
var array = input.split(",");
然后上面的结果将是:["1", "2", "3"]
但我需要能够提供这样的输入:var data = "[[1, 2, 3,], [3, 2, 1]]";
并期望此输出:[[1, 2, 3,], [3, 2, 1]];
另请注意,括号中的值是数字而不是字符串。
我也试过这样做:
var data = "[1, 2, 3,], [3, 2, 1]";
var res = data.split(",");
这给出了输出:["[1", " 2", " 3", "]", " [3", " 2", " 1]"]
最后我还发现了这个例子:Convert string with commas to array其中解决方案使用了JSON.parse(...),但我也没有做到这一点。
答案 0 :(得分:4)
如果你的数组有尾随逗号,你可以使用这段代码:
var data = "[[1, 2, 3,], [3, 2, 1]]";
var array = JSON.parse(data.replace(/,\s*]/g, ']'));
console.log(array);

如果你有这样的字符串:
var data = "[1, 2, 3,], [3, 2, 1]";
使用
var array = JSON.parse('[' + data.replace(/,\s*]/g, ']') + ']');
示例:
var data = "[1, 2, 3,], [3, 2, 1]";
var array = JSON.parse('[' + data.replace(/,\s*]/g, ']') + ']');
console.log(array);

答案 1 :(得分:1)
正如我在评论中所说,这不是JSON,因为有逗号的尾随。
修改一个不在JSON中的字符串,使其可以使用JSON.parse
看起来像一个愚蠢的黑客,特别是当正确的解析很容易。
另一种选择是:
var arr = str.split(/[\[\]]+,?\s*/)
.filter(Boolean)
.map(s=>s.split(/\D+/).filter(Boolean).map(Number));