Как использовать назначение деструкции ES6 для назначения одного объекта другому

#javascript #ecmascript-6 #destructuring

Вопрос:

Мне нужно, чтобы значение ключей в объекте arrA копировалось на arrB основе key имени. Вот мои два объекта:

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

Как мне это сделать с ES6 помощью деконструктивного задания:

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

Ответ №1:

Используя назначение уничтожения, вам придется явно определить каждое свойство, которое вы хотите скопировать:

 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); 

Однако этот код очень повторяющийся, и хуже всего то, что он явно связан с тем, что копируется.

Ответ №2:

Цель деструктурирования состоит в том, чтобы извлечь переменные из объекта в вашу локальную область. Узнайте больше о деструктуризации здесь. Вероятно, вам лучше решить эту проблему с помощью других инструментов.

Используя комбинацию различных функций, вы можете сделать это вместо этого:

 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) 

Сначала я забираю все ключи из arra с помощью Object.keys (), затем я создаю список пар с помощью функции .map (), и, наконец, я превращаю пары в новый объект с помощью Object.fromEntries()

Ответ №3:

Lodash pick() — ваш друг здесь (потому что жизнь слишком коротка, чтобы писать скучный шаблонный код):

Ты просто npm install lodash так и говоришь:

 const _ = require('lodash');

_.pick( sourceObjectOrArray, arrayOfDesiredPaths ); 
 

Подобный этому:

 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) );
 

И вы обнаружите picked , что это то, чего вы ожидали:

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