Trilhas
/
JavaScript
JavaScript
/
Programa
/
Rest e spread
Re

Rest e spread em JavaScript

9 exercícios

Sobre Rest e spread

O JavaScript tem um operador ... nativo que facilita o trabalho com um número indefinido de elementos. Dependendo do contexto, ele é chamado de operador rest ou operador spread.

Operador rest

Elementos rest

Quando ... aparece no lado esquerdo de uma atribuição, esses três pontos são conhecidos como o operador rest. Os três pontos junto com um nome de variável formam o que se chama de elemento rest. Ele coleta zero ou mais valores e os armazena em um único array.

const [a, b, ...everythingElse] = [0, 1, 1, 2, 3, 5, 8];

a;
// => 0
b;
// => 1
everythingElse;
// => [1, 2, 3, 5, 8]

Repare que, em JavaScript, ao contrário de algumas outras linguagens, um elemento rest não pode ter vírgula final. Ele precisa ser o último elemento de uma atribuição por desestruturação. O exemplo abaixo lança um SyntaxError:

const [...items, last] = [2, 4, 8, 16]

Propriedades rest

Assim como nos arrays, o operador rest também pode ser usado para coletar uma ou mais propriedades de um objeto e armazená-las em um único objeto.

const { street, ...address } = {
  street: 'Platz der Republik 1',
  postalCode: '11011',
  city: 'Berlin',
};

street;
// => 'Platz der Republik 1'

address;
// => {postalCode: '11011', city: 'Berlin'}

Parâmetros rest

Quando ... aparece em uma definição de função ao lado do último argumento dela, esse parâmetro é chamado de parâmetro rest. Ele permite que a função aceite um número indefinido de argumentos como um array.

function concat(...strings) {
  return strings.join(' ');
}

concat('one');
// => 'one'

concat('one', 'two', 'three');
// => 'one two three'

Spread

Elementos spread

Quando ... aparece no lado direito de uma atribuição, ele é conhecido como o operador spread. Ele expande um array em uma lista de elementos. Ao contrário do elemento rest, ele pode aparecer em qualquer posição de uma expressão literal de array, e pode haver mais de um.

const oneToFive = [1, 2, 3, 4, 5];
const oneToTen = [...oneToFive, 6, 7, 8, 9, 10];

oneToTen;
// => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
const woow = ['A', ...oneToFive, 'B', 'C', 'D', 'E', ...oneToFive, 42];

woow;
// =>  ["A", 1, 2, 3, 4, 5, "B", "C", "D", "E", 1, 2, 3, 4, 5, 42]

Propriedades spread

Assim como nos arrays, o operador spread também pode ser usado para copiar propriedades de um objeto para outro.

let address = {
  postalCode: '11011',
  city: 'Berlin',
};

address = { ...address, country: 'Germany' };
// => {
//   postalCode: '11011',
//   city: 'Berlin',
//   country: 'Germany',
// }
Editar via GitHub O link abre em uma nova janela ou aba

Aprenda Rest e spread