246 votes

Chaine en objet 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 ?

4voto

James Yang Points 86

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.

3voto

Digitlimit Points 9724
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];
       });
    }

3voto

solice Points 19
const text = '{"name":"John", "age":30, "city":"New York"}';
const myArr = JSON.parse(text);
document.getElementById("demo").innerHTML = myArr.name;

2voto

panatoni Points 104

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)

1voto

Akash Singh Points 387

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.com

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.

Powered by:

X