将Array of Array数组转换为Javascript数组数组的优雅方法?

时间:2013-10-17 04:20:44

标签: javascript arrays

我有一个ajax请求,它返回一个像这样的值列表:

"[-5, 5, 5], [-6, 15, 15], [7, 13, 12]"

我需要它是一个带数字的javascript数组:

[[-5, 5, 5], [-6, 15, 15], [7, 13, 12]]

我试图将'['和']'替换为'|'然后用'|'拆分和','将项目拆分为','并将它们添加到数组中,但这 非常优雅。

你们有什么建议吗?

5 个答案:

答案 0 :(得分:18)

您可以使用JSON.parse()将该字符串转换为数组,只要先将其手动包装在某些括号中:

var value = "[-5, 5, 5], [-6, 15, 15], [7, 13, 12]";
var json = JSON.parse("[" + value + "]");

console.log(json);

我建议尽可能纠正服务器上的输出。

答案 1 :(得分:2)

这个解决方案在实践中是愚蠢的 - 绝对使用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]");

答案 2 :(得分:1)

如果您正在生成数据并且您信任它,请使用eval

var string = "[-5, 5, 5], [-6, 15, 15], [7, 13, 12]"

var arrays = eval('[' + string + ']');

或者,开始返回结构良好的JSON。

答案 3 :(得分:1)

在函数中

var strToArr = function(string){ return JSON.parse('[' + string + ']')}

console.log(strToArr("[-5, 5, 5], [-6, 15, 15], [7, 13, 12]"));

答案 4 :(得分:1)

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上打字,所以我提前为任何错别字道歉。