Na IMO, essa é a maneira mais fácil de realizar o que você está procurando:
let { prop1, prop2, prop3 } = someObject;
let data = { prop1, prop2, prop3 };
// data === { prop1: someObject.prop1, ... }
Basicamente, desestruture em variáveis e use a abreviação do inicializador para criar um novo objeto. Não há necessidade deObject.assign
Eu acho que essa é a maneira mais legível, de qualquer maneira. Você pode selecionar os adereços exatos someObject
que deseja. Se você já possui um objeto no qual deseja mesclar os objetos, faça algo assim:
let { prop1, prop2, prop3 } = someObject;
let data = Object.assign(otherObject, { prop1, prop2, prop3 });
// Makes a new copy, or...
Object.assign(otherObject, { prop1, prop2, prop3 });
// Merges into otherObject
Outra maneira, sem dúvida mais limpa, de escrevê-lo é:
let { prop1, prop2, prop3 } = someObject;
let newObject = { prop1, prop2, prop3 };
// Merges your selected props into otherObject
Object.assign(otherObject, newObject);
Eu uso muito isso para POST
solicitações em que preciso apenas de alguns dados discretos. Mas, eu concordo que deve haver uma linha para fazer isso.
EDIT: PS -
Eu aprendi recentemente que você pode usar a ultra-desestruturação na primeira etapa para extrair valores aninhados de objetos complexos! Por exemplo...
let { prop1,
prop2: { somethingDeeper },
prop3: {
nested1: {
nested2
}
} = someObject;
let data = { prop1, somethingDeeper, nested2 };
Além disso, você pode usar o operador spread em vez do Object.assign ao criar um novo objeto:
const { prop1, prop2, prop3 } = someObject;
let finalObject = {...otherObject, prop1, prop2, prop3 };
Ou...
const { prop1, prop2, prop3 } = someObject;
const intermediateObject = { prop1, prop2, prop3 };
const finalObject = {...otherObject, ...intermediateObject };
Object.assign(oof, foo)