И. К.
И. К.

Reputation: 23

What is the best way to do this array tranformation in JavaScript?

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

Answers (1)

Unmitigated
Unmitigated

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

Related Questions