web-dev-qa-db-fra.com

Convertir les propriétés et les valeurs de l'objet en un tableau de paires de valeurs clés

Je suis assez nouveau sur JavaScript et je ne suis pas sûr que cela soit possible, mais en gros, je voudrais prendre un objet et le convertir en un tableau de chaînes au format; array[0] = 'prop1=value1'

Le raisonnement derrière cela est que je demande à un utilisateur d'entrer une liste de paires k = v dans un formulaire, plus tard, il est écrit en tant qu'objet dans un blob json. Passer de la valeur de clé csl à l'objet json était simple, maintenant je dois revenir en arrière (j'ai reçu le JSON via un appel ajax et je veux remplir un formulaire vierge). Est-ce possible en JavaScript? Sinon, veuillez proposer un travail raisonnable.

Exemple de code;

Objet dans le débogueur;

 Object
        private_key: "private-key"
        public_key: "public-key"

J'ai besoin de convertir cela en;

 "private_key=private-key,public_key=public-key"

Fondamentalement, j'ai besoin de quelque chose comme ça (pseudo-code)

var outputString = '';
foreach (prop in obj)
{
    outputString = outputString + prop.tostring() + '=' + prop.value + ',';
}
20
evanmcdonnal

Vous cherchez probablement quelque chose dans le sens de

var obj = {value1: 'prop1', value2: 'prop2', value3: 'prop3'};
var arr = [];
for (var key in obj) {
    if (obj.hasOwnProperty(key)) {
        arr.Push(key + '=' + obj[key]);
    }
};
var result = arr.join(',');
alert(result);

Notez que cela fonctionnera bien si vos valeurs sont des chaînes; s'il s'agit d'objets complexes, vous devrez ajouter plus de code.

Ou vous pouvez simplement utiliser jQuery.param , qui fait ce que vous voulez, même pour les types complexes (bien qu'il utilise le & comme séparateur, au lieu de la virgule.

37
carlosfigueira
var object = {
    private_key: "private-key",
    public_key: "public-key"
};

var array = [];
for (var prop in object)
    array.Push(prop + "=" + object[prop]);
return array.join(','); // "private_key=private-key,public_key=public-key"

Notez que la commande n'est pas garantie.

4
Bergi

Dans ES6, vous pouvez utiliser Object.entries({object1:1,object2:2});. Le résultat est: [["object1",1],["object2",2]]

4
remydib
var array = [];
for (k in o)
{
    if (o.hasOwnProperty(k))
    {
        array.Push(k+"="+o[k]);
    }
}

Vous pouvez alors join le tableau de votre chaîne finale.

4
Plynx
obj = {
  private_key: "private-key",
  public_key: "public-key"
}

str = JSON.stringify(obj).replace(/[{}]/g, '').replace(/"/g, '').replace(/:/g, '=');
console.log("Using JSON.stringify:\n", str);

str = Object.keys(obj).map((key) => `${key}=${obj[key]}`).join(',')
console.log("Using ES6 keys/map:\n", str);

str = jQuery.param(obj).replace(/&/g,',');
console.log("Using jQuery.param:\n", str);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
2
mojoaxel
var obj =[
            {'2018-05-07':1},
            {'2018-05-08':3},
            {'2018-05-09':2}
        ];

        for(var i of obj) {
            var key = Object.keys(i).toString();
            console.log(i,'=',i[key]);
        }

Résultat

: enter image description here

2
Ram Pukar