javascript:从字符串变量推送数组值

javascript:从字符串变量推送数组值,javascript,Javascript,正如标题所说,我试图从一个字符串变量设置一个数组 /*** THIS DOES NOT WORK ***/ var Multi = []; var test = "[0,1],[1,5],[2,3],[3,10]"; Multi.push(test); /*** THIS WORKS ***/ var Multi = []; Multi.push([0,1],[1,5],[2,3],[3,10]); 为什么当我把它保存为字符串时它就不工作了?当我通过AJAX从另一个PHP文件中提取这些值时

正如标题所说,我试图从一个字符串变量设置一个数组

/*** THIS DOES NOT WORK ***/
var Multi = [];
var test = "[0,1],[1,5],[2,3],[3,10]";
Multi.push(test);


/*** THIS WORKS ***/
var Multi = [];
Multi.push([0,1],[1,5],[2,3],[3,10]);
为什么当我把它保存为字符串时它就不工作了?当我通过AJAX从另一个PHP文件中提取这些值时,我需要它以字符串形式工作


谢谢。

您可以将字符串转换为有效的JSON,方法是在前面添加
[
,在后面添加
]
,然后使用
JSON.parse()
将JSON字符串转换为数组。现在您已经从字符串中获得了一个数组,您可以使用
Multi.push.apply(Multi,array)
扩展
Multi
数组,如下所示:

var Multi = [];
var test = "[0,1],[1,5],[2,3],[3,10]";
Multi.push.apply(Multi, JSON.parse('[' + test + ']'));

正如评论中提到的,一种更干净的方法是确保PHP文件生成有效的JSON。所有这些答案都是相同的,只是您不需要手动添加方括号。

如果您可以控制正在阅读的AJAX输入,您可以尝试:

var Multi = [],
    test = "0,1|1,5|2,3|3,10",
    groups = test.split('|');

for (var i = 0; i < groups.length; i++) {
    var tmpArray = groups[i].split(',');
    Multi.push(tmpArray);
}
var Multi=[],
test=“0,1 | 1,5 | 2,3 | 3,10”,
组=测试分割(“|”);
对于(变量i=0;i
有两种可能性:

让服务器发送JSON而不是任意数据格式,这样您就可以:

var response = "[[0,1],[1,5],[2,3],[3,10]]"; // JSON data coming as string from somewhere
Multi = JSON.parse(response);
(文件编制)

如果只接收数字数组或其他行为良好的数据,请在模式实例处拆分字符串:

var response = "[0,1],[1,5],[2,3],[3,10]"; // string coming from somewhere
Multi = response.split(/\s*\]\s*,\s*\[\s*/).map(
    function(s) {
        return s.split(/\s*,\s*/).map(parseInt);
    });

当它“在”一根线里面时,它只是一根线。如果JavaScript能够窥视每个字符串以发现是否有解析它的方法,那就太疯狂了。在你的情况下,你甚至没有一个有效的JSON结构。我有没有办法手动实现这一点?最好是确保服务器端为你准备一个干净的JSON结构。啊,好的,明白了。非常感谢。:)第二个方法将数字保留为字符串。谢谢。我在回答中包括了这一点。它也不会去掉前后括号,但读者应该明白这一点。