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
- A função recebe quatro parâmetros:
arr1,arr2,obj1,obj2. const arr = [...arr1, ...arr2];cria um novo array com os elementos dearr1seguidos dos dearr2.const obj = { ...obj1, ...obj2 };cria um novo objeto com as propriedades deobj1e depois as deobj2.- Como
obj2é espalhado depois, sua propriedadey: 20sobrescrevey: 2deobj1. - Retornamos
{ arr, obj }usando a forma abreviada de objeto (shorthand). - 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 }fariaobj1sobrescreverobj2, contrariando o enunciado. - Modificar os originais:
arr1.push(...arr2)alteraarr1; 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 } }