Na semana passada, escrevi 6 Grandes Usos do Operador de Spread, uma postagem que detalha como o operador de spread (...) para trabalhar com matrizes e outros objetos iteráveis. Como sempre, meus leitores contribuíram com alguns outros usos excelentes, que o senhor deve conferir na seção comentários. E, é claro, assim que publiquei a postagem, encontrei outro ótimo uso do operador de spread enquanto mexia no Babel e Reagir: mesclando propriedades de vários objetos em um único objeto!
O JavaScript
Envolva todos os objetos que o senhor gostaria que fossem mesclados em um só com chaves ({}):
const person = { name: 'David Walsh', gender: 'Male' };
const tools = { computer: 'Mac', editor: 'Atom' };
const summary = {...person, ...tools};
/*
Object {
"computer": "Mac",
"editor": "Atom",
"gender": "Male",
"name": "David Walsh",
}
*/
Um novo objeto é criado contendo todas as propriedades e valores dos objetos fornecidos com o operador rest. Observe também que o senhor pode fornecer qualquer número de objetos para mesclar:
const person = { name: 'David Walsh', gender: 'Male' };
const tools = { computer: 'Mac', editor: 'Atom' };
const attributes = { handsomeness: 'Extreme', hair: 'Brown', eyes: 'Blue' };
const summary = {...person, ...tools, ...attributes};
/*
Object {
"computer": "Mac",
"editor": "Atom",
"eyes": "Blue",
"gender": "Male",
"hair": "Brown",
"handsomeness": "Extreme",
"name": "David Walsh",
}
*/
No caso de uma colisão de chaves, o valor do objeto mais à direita (último) vence:
const person1 = { name: 'David Walsh', age: 33 };
const person2 = { name: 'David Walsh Jr.', role: 'kid' };
const merged = {...person1, ...person2}
/*
Object {
"name": "David Walsh Jr.",
"age": 33,
"role": "kid",
}
*/
Adoro como é fácil mesclar objetos usando o operador de propagação. O senhor pode usar o Object.assign para realizar a mesma façanha, mas o operador de propagação torna as coisas um pouco mais curtas se o senhor não se importar com uma sintaxe um pouco menos descritiva!
Observação: Essa sintaxe ainda não é compatível com todos os navegadores, mas o senhor pode usar o Babel com o transform-object-rest-spread para permitir a fusão de objetos com o operador de propagação.