Olá Habr! Apresento a você a tradução do artigo “7 truques para descansar e espalhar objetos JavaScript”, de Joel Thoms.Olá pessoal, outro dia um colega de trabalho me enviou um link para um artigo em inglês que lista diferentes métodos de trabalho com operadores de descanso e propagação. Ela foi útil para mim e eu decidi traduzi-lo. Então, vamos começar.
Os operadores Rest e Spread podem ser usados não apenas para combinar argumentos em uma matriz e combinar matrizes.Neste artigo, você encontrará os 7 truques menos conhecidos do uso de operadores de descanso e propagação.1. Adicionando propriedades
Clonar um objeto enquanto adiciona ao novo objeto no objeto clonado.No exemplo abaixo, clonamos o objeto de usuário e adicionamos a propriedade password ao objeto userWithPass clonado .const user = { id: 100, name: 'Howard Moon'}
const userWithPass = { ...user, password: 'Password!' }
user
userWithPass
2. Mesclando objetos
Analisando processos part1 e part2 merzhatsya um objeto user1const part1 = { id: 100, name: 'Howard Moon' }
const part2 = { id: 100, password: 'Password!' }
const user1 = { ...part1, ...part2 }
Portanto, os mesmos objetos podem ser contíguos usando essa sintaxe.const partial = { id: 100, name: 'Howard Moon' }
const user = { ...partial, id: 100, password: 'Password!' }
user
3. Removendo uma propriedade de um objeto
As propriedades de um objeto podem ser removidas usando uma combinação de instruções de desestruturação e descanso. No exemplo abaixo, destruímos o objeto restante e removemos a propriedade da senha .const noPassword = ({ password, ...rest }) => rest
const user = {
id: 100,
name: 'Howard Moon',
password: 'Password!'
}
noPassword(user)
4. Exclusão dinâmica de propriedades
No exemplo abaixo, a função removeProperty usa prop como argumento. Usando o nome da propriedade passado no argumento, excluímos dinamicamente a propriedade do objeto clonado.const user1 = {
id: 100,
name: 'Howard Moon',
password: 'Password!'
}
const removeProperty = prop => ({ [prop]: _, ...rest }) => rest
const removePassword = removeProperty('password')
const removeId = removeProperty('id')
removePassword(user1)
removeId(user1)
5. Organização ou classificação de propriedades por nome
Às vezes, as propriedades no objeto não estão na ordem que precisamos. Usando vários truques, podemos enviar propriedades para o topo da lista ou para o meio, por exemplo.const user3 = {
password: 'Password!',
name: 'Naboo',
id: 300
}
const organize = object => ({ id: undefined, ...object })
organize(user3)
Para colocar a senha no final, primeiro você precisa destruir o objeto e remover a senha e, em seguida, usar o operador de propagação para adicioná-lo.6. Propriedades Padrão
As propriedades padrão são as propriedades que serão definidas se não estiverem no objeto clonado.No exemplo abaixo, o campo de aspas está ausente no objeto user2 . A função setDefaults, na ausência do campo de aspas , a define por padrão com o valor [] . Depois de chamar a função setDefaults (user2) , ela retorna uma propriedade com as cotações de valor : []
Ao chamar setDefaults (user4), a função retorna um valor não modificado, pois o objeto user4 já possui a propriedade aspasconst user2 = {
id: 200,
name: 'Vince Noir'
}
const user4 = {
id: 400,
name: 'Bollo',
quotes: ["I've got a bad feeling about this..."]
}
const setDefaults = ({ quotes = [], ...object}) =>
({ ...object, quotes })
setDefaults(user2)
setDefaults(user4)
Você também pode escrevê-lo assim se desejar que os valores padrão sejam exibidos primeiro:const setDefaults = ({ ...object}) => ({ quotes: [], ...object })
7. Renomeando propriedades
Usando os truques de cima, também podemos criar uma função que renomeia as propriedades do objeto para nós.Imagine que temos um objeto com o ID da propriedade escrito em maiúsculas e precisamos renomeá-lo para minúsculas. Começamos removendo a propriedade ID do objeto. Em seguida, adicione-o novamente com o nome id enquanto o objeto estiver sendo clonado.const renamed = ({ ID, ...object }) => ({ id: ID, ...object })
const user = {
ID: 500,
name: "Bob Fossil"
}
renamed(user)
8. bônus. Adicionando uma propriedade com base em uma condição
Agradecemos a @vinialbano por mostrar esse método. Neste exemplo, adicionamos o campo de senha apenas se password == true !const user = { id: 100, name: 'Howard Moon' }
const password = 'Password!'
const userWithPassword = {
...user,
id: 100,
...(password && { password })
}
userWithPassword
Conclusão
Tentei listar alguns métodos menos conhecidos de usar operadores de descanso e propagação. Se você conhece outros métodos que não estão listados nesta lista, escreva sobre eles nos comentários. Se este artigo foi útil para você, repassá-lo para seus amigos e conhecidos.