11
votes

Comment convertir une chaîne en carte de JavaScript?

Dites, nous avons une chaîne de requête qui ressemble à ceci:

{param:test1, param2:test2}


0 commentaires

4 Réponses :


4
votes

Tant que c'est dans ce format, c'est-à-dire que des valeurs de chaîne (et les chaînes ne contiennent pas "&&" code> ou des points), vous pouvez facilement analyser:

var params = theString.split(' && ');
var map = {};
for (var i = 0; i < params.length; i++) {
  var parts = params[i].split(':');
  map[parts[0]] = parts[1].substr(1, parts[1].length - 2);
}


0 commentaires


1
votes

1 commentaires

Vous avez raison, j'ai pensé à cela, mais lisez ce que vous avez dit au-dessus de votre réponse, alors je pensais que quelqu'un d'autre a fait référence à cela, je ne suis pas obligé, mais je devrais éditer sans faire référence à cela aussi, merci.



1
votes

Utilisez la fonction string.split pour casser la chaîne dans les pièces dont vous avez besoin - quelque chose comme ça ...

var input = "param1:'test1' && param2:'test2'";
var entries = input.split(" && ");
var map = {};
var pattern = /'/g;
for(var i=0; i < entries.length; i++){
    var tokens = entries[i].split[":"];
    map[tokens[0]] = tokens[1].replace(pattern, "");
}


4 commentaires

C'est plutôt satisfaisant de voir que d'autres personnes sont arrivées à presque exactement la même solution - doivent passer un certain temps à comprendre la réponse fournie par Andy E, comme je n'ai jamais vu String.Replac utilisé avec une fonction de deuxième paramètre. Peut-être que Andy e pourrait étendre sa réponse au profit d'autres comme moi.


C'est beaucoup comme une regex EXEC () , sauf qu'il n'y a pas de boucle et que vous nommez les sous-captures dans leur propre fermeture privée. C'est pourquoi j'ai lié à l'article où John Resig a inventé le terme et a expliqué la méthode :-)


@Guffa - Très vrai, c'est pourquoi la réponse fournie par Andy E est intéressante.


@Andy e - n'a pas repéré le lien. Merci de le pointer de la sortie - à l'aide d'une fonction qui renvoie une chaîne, au lieu d'une chaîne est facile à comprendre, mais je ne savais pas que la fonction a certains aspects de la recherche de REGEXP transmise à celle-ci. Comme d'habitude, M. Cosig sait le mieux. :-)