Question Un moyen élégant de convertir une chaîne de tableaux de tableaux en un tableau Javascript de tableaux?


J'ai une requête ajax qui renvoie une liste de valeurs comme celle-ci:

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

J'ai besoin que ce soit un tableau javascript avec des nombres:

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

J'ai essayé de remplacer les '[' et ']' pour un '|' et ensuite divisé par '|' et foreach point divisé par ',' et les ajouter à un tableau, mais ceci est ne pas élégant du tout.

Avez-vous des suggestions?


11
2017-10-17 04:20


origine


Réponses:


Vous pouvez utiliser JSON.parse() pour convertir cette chaîne en un tableau, à condition que vous l'encadriez manuellement entre parenthèses:

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

console.log(json);

Je suggère toutefois de corriger la sortie sur le serveur si possible.


17
2017-10-17 04:25



Cette solution est stupide en pratique - à utiliser absolument JSON.parse comme d’autres l’ont dit - mais dans l’intérêt de vous amuser avec des expressions régulières, vous voici:

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
2017-10-17 05:03



Dans une fonction

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

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

1
2017-10-17 04:38



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(', '));
}

Taper sur mon iPad donc je m'excuse d'avance pour les fautes de frappe.


1
2017-10-17 04:43



Si vous générez les données et que vous leur faites confiance, utilisez simplement eval:

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

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

Alternativement, commencez à retourner JSON bien formé.


0
2017-10-17 04:24