Médio JavaScript

Combinar arrays e objetos com spread

Enunciado

Crie uma função combinar que recebe dois arrays e dois objetos. Ela deve retornar um novo array com todos os elementos dos dois arrays (na ordem) e um novo objeto com as propriedades de ambos, dando prioridade ao segundo objeto em caso de chaves iguais. Use spread.

Requisitos

  • Usar spread para arrays e para objetos
  • Retornar um array e um objeto (pode ser um objeto com duas propriedades)
  • Não modificar os arrays/objetos originais

Código inicial

function combinar(arr1, arr2, obj1, obj2) {
  // seu código aqui
}

// Exemplo de uso:
const a = [1, 2];
const b = [3, 4];
const o1 = { x: 1, y: 2 };
const o2 = { y: 20, z: 30 };
console.log(combinar(a, b, o1, o2));

Saída esperada

{ arr: [ 1, 2, 3, 4 ], obj: { x: 1, y: 20, z: 30 } }
Ver dica

Use [...arr1, ...arr2] e { ...obj1, ...obj2 }. A ordem importa: o último spread sobrescreve chaves repetidas.

Mostrar solução
function combinar(arr1, arr2, obj1, obj2) {
  const arr = [...arr1, ...arr2]; // concatena arrays
  const obj = { ...obj1, ...obj2 }; // mescla objetos, obj2 sobrescreve
  return { arr, obj };
}

const a = [1, 2];
const b = [3, 4];
const o1 = { x: 1, y: 2 };
const o2 = { y: 20, z: 30 };
console.log(combinar(a, b, o1, o2));

Passo a passo

  1. A função recebe quatro parâmetros: arr1, arr2, obj1, obj2.
  2. const arr = [...arr1, ...arr2]; cria um novo array com os elementos de arr1 seguidos dos de arr2.
  3. const obj = { ...obj1, ...obj2 }; cria um novo objeto com as propriedades de obj1 e depois as de obj2.
  4. Como obj2 é espalhado depois, sua propriedade y: 20 sobrescreve y: 2 de obj1.
  5. Retornamos { arr, obj } usando a forma abreviada de objeto (shorthand).
  6. Chamamos a função e imprimimos o resultado.

Por que funciona

O spread cria uma cópia rasa dos elementos/propriedades. Para arrays, a ordem é preservada. Para objetos, a última ocorrência de uma chave vence, o que permite sobrescrever valores de forma controlada. Os originais não são modificados.

Erros comuns

  • Esquecer o spread: const arr = [arr1, arr2] cria um array de arrays, não uma concatenação.
  • Inverter a ordem dos objetos: { ...obj2, ...obj1 } faria obj1 sobrescrever obj2, contrariando o enunciado.
  • Modificar os originais: arr1.push(...arr2) altera arr1; use spread para evitar efeitos colaterais.

Outra forma de resolver

Usando concat e Object.assign:

const arr = arr1.concat(arr2);
const obj = Object.assign({}, obj1, obj2);

Funciona, mas o spread é mais moderno e legível.

Saída esperada

{ arr: [ 1, 2, 3, 4 ], obj: { x: 1, y: 20, z: 30 } }