Reputation: 23
I have an initial object. Context can have more than 2 keys.
{
term: 'account',
definition: 'term definition',
context: 'defaultValues.accountNames'
},
{
term: 'position',
definition: 'position definition',
context: 'defaultValues.accountNames'
},
And I need to format it to next (context and term - keys of object, and term is the last prop and have a definition value)
{
defaultValues: {
accountNames: {
account: "term definition",
position: "position definition"
}
}
}
Upvotes: 1
Views: 52
Reputation: 89254
You can use Array#reduce
.
let arr = [{
term: 'account',
definition: 'term definition',
context: 'defaultValues.accountNames'
},
{
term: 'position',
definition: 'position definition',
context: 'defaultValues.accountNames'
}]
let res = arr.reduce((acc, {term, definition, context})=>{
context.split('.').reduce((a,b)=>(a[b] ??= {}), acc)[term] = definition;
return acc;
}, {});
console.log(res);
Upvotes: 2