Comment convertir une chaîne en une carte en javascript?
Dire, nous avons une chaîne de requête qui ressemble à ceci:
"param1:'test1' && param2:'test2'"
Je voudrais le transformer en un objet de la carte, comme ceci:
{param:test1, param2:test2}
Comment peut-on le faire? Cela semble être un très commun de cas d'utilisation.
OriginalL'auteur ming yeow | 2010-09-09
Vous devez vous connecter pour publier un commentaire.
J'ai l'habitude d'utiliser le "la recherche et de ne pas remplacer" méthode:
Exemple: http://jsfiddle.net/bcJ9s/
L'important, ici, est de savoir si vous pouvez prédire le format de la "cordes" à l'avant, afin de rendre l'expression la plus simple possible. Cela aidera à l'entretien, à l'avenir, mais doit sans doute être bien documenté quelque part, alors qu'il est clair que les hypothèses sont.
OriginalL'auteur Andy E
Tant que c'est dans ce format, c'est à dire uniquement a la chaîne de valeurs (et les cordes ne contiennent pas de
" && "
ou colons), vous pouvez facilement analyser:Note que les chaînes sont bien sûr toujours des chaînes:
{ param: 'test1', param2: 'test2' }
OriginalL'auteur Guffa
Utilisation de la chaîne.fonction de répartition pour briser la chaîne dans les pièces dont vous avez besoin - quelque chose comme cela...
Bien qu'il ne fonctionne pas avec des valeurs comme
"param1:'test:1' && param2:'test && 2'"
...c'est très bien comme une regex exec(), à l'exception il n'y a pas de boucle et vous de nommer les sous-capture dans leur propre fermeture. C'est pourquoi j'ai fait un lien vers l'article où John Resig a inventé le terme et explique la méthode 🙂
très vrai, c'est pourquoi la réponse fournie par Andy E est intéressante.
E - ne l'avais pas vu le lien. Merci pour le tuyau, à l'aide d'une fonction qui retourne une chaîne de caractères, au lieu d'une chaîne de caractères est facile à comprendre, mais je ne savais pas que la fonction a certains aspects de la recherche regexp est passé. Comme d'habitude, M. Resig sait mieux. 🙂
OriginalL'auteur belugabob
Utilisation du traitement de chaîne (Comme mentionné par @Guffa, ce sera un échec si les chaînes elles-mêmes contenues
&&
ou:
):Remarque:
trim()
n'est pas disponible sur les anciens navigateurs, vous devez ajouter ce bout de code avant que l'un au-dessus de [src]:"param1:'test:1' && param2:'test && 2'"
...Vous avez raison, j'ai pensé à ça, mais lire ce que vous avez dit au-dessus de votre réponse j'ai donc pensé que quelqu'un d'autre visée à cet je n'ai pas, mais je proabably devrait modifier en se référant pour cela aussi, merci.
OriginalL'auteur aularon