2

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

/*** 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 文件中提取这些值。

谢谢。

4

3 回答 3

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。除了您不需要手动添加方括号外,所有这些答案都是相同的。

于 2013-10-15T20:11:09.583 回答
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()

字符串.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);
    });
于 2013-10-15T20:18:34.840 回答
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);
}
于 2013-10-15T20:14:30.513 回答