我有一个 ajax 请求,它返回如下值列表:
"[-5, 5, 5], [-6, 15, 15], [7, 13, 12]"
我需要它是一个带有数字的javascript数组:
[[-5, 5, 5], [-6, 15, 15], [7, 13, 12]]
我试图用 '|' 替换 '[' 和 ']' 然后用'|'分割 和 foreach 项目由 ',' 分割,并将它们添加到数组中,但这一点也不优雅。
你们有什么建议吗?
我有一个 ajax 请求,它返回如下值列表:
"[-5, 5, 5], [-6, 15, 15], [7, 13, 12]"
我需要它是一个带有数字的javascript数组:
[[-5, 5, 5], [-6, 15, 15], [7, 13, 12]]
我试图用 '|' 替换 '[' 和 ']' 然后用'|'分割 和 foreach 项目由 ',' 分割,并将它们添加到数组中,但这一点也不优雅。
你们有什么建议吗?
您可以使用JSON.parse()
将该字符串转换为数组,只要您先手动将其包裹在一些括号中:
var value = "[-5, 5, 5], [-6, 15, 15], [7, 13, 12]";
var json = JSON.parse("[" + value + "]");
console.log(json);
不过,如果可能,我建议更正服务器上的输出。
这个解决方案在实践中是愚蠢的——绝对JSON.parse
像其他人所说的那样使用——但为了享受正则表达式的乐趣,你去吧:
function getMatches(regexp, string) {
var match, matches = [];
while ((match = regexp.exec(string)) !== null)
matches.push(match[0]);
return matches;
}
function parseIntArrays(string) {
return getMatches(/\[[^\]]+\]/g, string)
.map(function (string) {
return getMatches(/\-?\d+/g, string)
.map(function (string) {
return parseInt(string);
});
});
}
parseIntArrays("[-5, 5, 5], [-6, 15, 15], [7, 13, 12]");
在一个函数中
var strToArr = function(string){ return JSON.parse('[' + string + ']')}
console.log(strToArr("[-5, 5, 5], [-6, 15, 15], [7, 13, 12]"));
var string = "[-5, 5, 5], [-6, 15, 15], [7, 13, 12]";
var arr = [];
var tmp = string.split('], ');
for (var i=0; i<tmp.length; i++) {
arr.push(tmp[i].replace(/\[|\]/g, '').split(', '));
}
在我的 iPad 上打字,所以我提前为任何错别字道歉。
如果您正在生成数据并且您信任它,只需使用eval
:
var string = "[-5, 5, 5], [-6, 15, 15], [7, 13, 12]"
var arrays = eval('[' + string + ']');
或者,开始返回格式良好的 JSON。