转换数组的字符串,包含数组数组

时间:2017-03-12 13:59:59

标签: javascript

我有一个这样的字符串: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(...),但我也没有做到这一点。

2 个答案:

答案 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));