apple
apple

Reputation: 3

How to use ES6 destructuring assignment to assign one object to another

I need the value of keys in object arrA to be copied from arrB based on key name. Here are my two objects:

let arrA = {
    'aaa':'',
    'bbb':'',
    'ccc':''
}
let arrb = {
    'aaa':'111',
    'bbb':'222',
    'ccc':'333',
    'ddd':'444',
    'eee':'555',
    ...
}

How do I do this with the ES6 deconstructive assignment:

arrA = {
    'aaa':'111',
    'bbb':'222',
    'ccc':'333'
}

Upvotes: 0

Views: 178

Answers (3)

Nicholas Carey
Nicholas Carey

Reputation: 74187

Lodash's pick() is your friend here (because life is too short to write boring boilerpllate code):

You just npm install lodash and say:

const _ = require('lodash');

_.pick( sourceObjectOrArray, arrayOfDesiredPaths ); 

Like this:

const _      = require('lodash');
const source = {
  a: 1,
  b: 2,
  c: 3,
  d: 4,
  e: 5,
  f: 6,
  g: 7,
}
const picked = _.pick( source, ['a','c','e'] );

console.log( JSON.stringify(picked) );

And you'll find picked is what you'd expect:

{
  a: 1,
  c: 3,
  e: 5
}

Upvotes: 0

Samathingamajig
Samathingamajig

Reputation: 13245

Using destructing assignment, you'd have to explicitly define each property you'd want to copy:

let arra = {
  'aaa': '',
  'bbb': '',
  'ccc': ''
};
let arrb = {
  'aaa': '111',
  'bbb': '222',
  'ccc': '333',
  'ddd': '444',
  'eee': '555',
};

({aaa: arra.aaa, bbb: arra.bbb, ccc: arra.ccc} = arrb);

console.log(arra);

However, this code is very repetitive, and the worst part is that it's explicit with what gets copied.

Upvotes: 3

Scotty Jamison
Scotty Jamison

Reputation: 13129

The purpose of destructuring is to pull out variables from the object into your local scope. Learn more about destructuring here. You're probably better off solving this problem with different tools.

Using a combination of different functions, you can do this instead:

let arra = {
    'aaa':'',
    'bbb':'',
    'ccc':''
}
let arrb = {
    'aaa':'111',
    'bbb':'222',
    'ccc':'333',
    'ddd':'444',
    'eee':'555'
}

const result = Object.fromEntries(
  Object.keys(arra)
    .map(key => [key, arrb[key]])
)

console.log(result)

First, I'm grabbing all of the keys from arra with Object.keys(), then I'm creating a list of pairs using the .map() function, and finally I'm turning the pairs into a new object with Object.fromEntries()

Upvotes: 1

Related Questions