将数组数组字符串转换为 Javascript 数组数组的优雅方法

Elegant way to convert string of Array of Arrays into a Javascript array of arrays?

本文关键字:数组 方法 字符串 转换 Javascript      更新时间:2023-09-26

我有一个 ajax 请求,它返回如下值列表:

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

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

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

我试图将"["和"]"替换为"|",然后按"|"拆分,然后按","拆分每个项目并将它们添加到数组中,但这根本不优雅。

你们有什么建议吗?

您可以使用

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]");

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

var string = "[-5, 5, 5], [-6, 15, 15], [7, 13, 12]"
var arrays = eval('[' + string + ']');

或者,开始返回格式正确的 JSON。

在函数中

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