Reputation: 45
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
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
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
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