paulrostorp
paulrostorp

Reputation: 45

How to transform a JSON array into a JS?

What would be a syntactically optimal way to obtain a JS object from JSON? I have a json file describing form fields, from it I would like to obtain JS object that contains only the value of the name field, equal to null. Like so:

JSON Input :

[
    {
        "name": "firstname",
        "en": "First Name",
        "fr": "Prénom",
        "type": "text"
    },
    {
        "name": "name",
        "en": "Last Name",
        "fr": "Nom",
        "type": "text"
    },
    {
        "name": "email",
        "en": "Email",
        "fr": "Email",
        "type": "text"
    },
    {
        "name": "password",
        "en": "Password",
        "fr": "Mot de Passe",
        "type": "password"
    }
]

Js object result:

{
    firstname: null,
    name: null,
    email: null,
    password: null
}

Any suggestions?

Upvotes: 1

Views: 65

Answers (3)

Nina Scholz
Nina Scholz

Reputation: 386519

You could use Object.assign with spread syntax ... for the properties.

var array = [{ name: "firstname", en: "First Name", fr: "Prénom", type: "text" }, { name: "name", en: "Last Name", fr: "Nom", type: "text" }, { name: "email", en: "Email", fr: "Email", type: "text" }, { name: "password", en: "Password", fr: "Mot de Passe", type: "password" }],
    object = Object.assign(...array.map(({ name }) => ({ [name]: null })));
    
console.log(object);

Upvotes: 2

Hassan Imam
Hassan Imam

Reputation: 22524

Use array#reduce.

var data = [{ "name": "firstname", "en": "First Name", "fr": "Prénom", "type":"text" }, { "name": "name", "en": "Last Name", "fr": "Nom", "type":"text" }, { "name": "email", "en": "Email", "fr": "Email", "type": "text" }, { "name": "password", "en": "Password", "fr":"Mot de Passe", "type":"password" } ],
    result = data.reduce((r, {name}) => (r[name] = null, r), {});
console.log(result);

Upvotes: 1

gurvinder372
gurvinder372

Reputation: 68363

Use reduce

var output = arr.reduce( ( a, c ) => ( a[c.name] = null, a ),  {} );

Demo

var arr = [{
    "name": "firstname",
    "en": "First Name",
    "fr": "Prénom",
    "type": "text"
  },
  {
    "name": "name",
    "en": "Last Name",
    "fr": "Nom",
    "type": "text"
  },
  {
    "name": "email",
    "en": "Email",
    "fr": "Email",
    "type": "text"
  },
  {
    "name": "password",
    "en": "Password",
    "fr": "Mot de Passe",
    "type": "password"
  }
]

var output = arr.reduce((a, c) => (a[c.name] = null, a), {});
console.log(output);

Upvotes: 1

Related Questions