J'ai une chaîne de caractères comme
string = "firstName:name1, lastName:last1";
maintenant j'ai besoin d'un objet obj tel que
obj = {firstName:name1, lastName:last1}
Comment puis-je faire cela en JS ?
J'ai une chaîne de caractères comme
string = "firstName:name1, lastName:last1";
maintenant j'ai besoin d'un objet obj tel que
obj = {firstName:name1, lastName:last1}
Comment puis-je faire cela en JS ?
J'utilise JSON5 et ça marche plutôt bien.
La bonne nouvelle, c'est qu'il contient pas de eval
y pas de new Function
très sûr à utiliser.
string = "firstName:name1, lastName:last1";
Ça va marcher :
var fields = string.split(', '),
fieldObject = {};
if( typeof fields === 'object') ){
fields.each(function(field) {
var c = property.split(':');
fieldObject[c[0]] = c[1];
});
}
Cependant, ce n'est pas efficace. Que se passe-t-il lorsque vous avez quelque chose comme ça :
string = "firstName:name1, lastName:last1, profileUrl:http://localhost/site/profile/1";
split()
divisera 'http'. Je vous suggère donc d'utiliser un délimiteur spécial comme pipe.
string = "firstName|name1, lastName|last1";
var fields = string.split(', '),
fieldObject = {};
if( typeof fields === 'object') ){
fields.each(function(field) {
var c = property.split('|');
fieldObject[c[0]] = c[1];
});
}
C'est un code universel, peu importe la longueur de votre entrée mais dans le même schéma s'il y a : séparateur :)
var string = "firstName:name1, lastName:last1";
var pass = string.replace(',',':');
var arr = pass.split(':');
var empty = {};
arr.forEach(function(el,i){
var b = i + 1, c = b/2, e = c.toString();
if(e.indexOf('.') != -1 ) {
empty[el] = arr[i+1];
}
});
console.log(empty)
Voici mon approche pour gérer certains cas limites comme les espaces et d'autres types primitifs comme valeurs.
const str = " c:234 , d:sdfg ,e: true, f:null, g: undefined, h:name ";
const strToObj = str
.trim()
.split(",")
.reduce((acc, item) => {
const [key, val = ""] = item.trim().split(":");
let newVal = val.trim();
if (newVal == "null") {
newVal = null;
} else if (newVal == "undefined") {
newVal = void 0;
} else if (!Number.isNaN(Number(newVal))) {
newVal = Number(newVal);
}else if (newVal == "true" || newVal == "false") {
newVal = Boolean(newVal);
}
return { ...acc, [key.trim()]: newVal };
}, {});
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.