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

时间:2013-10-15 20:03:35

标签: 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文件中提取这些值。

感谢。

3 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:2)

两种可能性:

JSON

使服务器发送JSON而不是任意数据格式,以便您拥有以下内容:

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

JSON.parse()的文件)

String.split()

如果您只接收数字数组数组或其他表现良好的数据,则在模式实例中拆分字符串:

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);
    });

答案 2 :(得分:0)

如果您可以控制正在阅读的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);
}