正如标题所说,我正在尝试从字符串变量设置数组。
/*** 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文件中提取这些值。
感谢。
答案 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而不是任意数据格式,以便您拥有以下内容:
var response = "[[0,1],[1,5],[2,3],[3,10]]"; // JSON data coming as string from somewhere
Multi = JSON.parse(response);
(JSON.parse()
的文件)
如果您只接收数字数组数组或其他表现良好的数据,则在模式实例中拆分字符串:
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);
}