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.