Junior
Como remover todos os duplicados de um array?
sobes.tech IA
Resposta da IA
Existem várias formas comuns:
-
Uso de
Set: A forma mais moderna e concisa.Setarmazena apenas valores únicos.const arr = [1, 2, 2, 3, 4, 4, 5]; const uniqueArr = [...new Set(arr)]; // uniqueArr será [1, 2, 3, 4, 5]const arr = [{ id: 1, name: 'A' }, { id: 2, name: 'B' }, { id: 1, name: 'A' }]; const uniqueArr = Array.from(new Set(arr.map(JSON.stringify))).map(JSON.parse); // Para objetos, é necessário converter para strings para comparação correta no Set // uniqueArr será [{ id: 1, name: 'A' }, { id: 2, name: 'B' }] -
Uso de
filtereindexOf: Filtra o array deixando apenas os elementos cuja primeira ocorrência corresponde ao seu índice atual.const arr = [1, 2, 2, 3, 4, 4, 5]; const uniqueArr = arr.filter((item, index) => arr.indexOf(item) === index); // uniqueArr será [1, 2, 3, 4, 5] -
Uso de
reduce: Cria um novo array adicionando elementos se ainda não estiverem presentes.const arr = [1, 2, 2, 3, 4, 4, 5]; const uniqueArr = arr.reduce((accumulator, current) => { if (!accumulator.includes(current)) { accumulator.push(current); } return accumulator; }, []); // uniqueArr será [1, 2, 3, 4, 5]const arr = [1, 2, 2, 3, 4, 4, 5]; const uniqueArr = arr.reduce((accumulator, current) => accumulator.includes(current) ? accumulator : [...accumulator, current], []); // Variante mais curta // uniqueArr será [1, 2, 3, 4, 5] -
Uso de objeto/Map: Cria um objeto temporário ou
Mappara rastrear elementos já encontrados.const arr = [1, 2, 2, 3, 4, 4, 5]; const seen = {}; const uniqueArr = arr.filter(item => seen.hasOwnProperty(item) ? false : (seen[item] = true)); // uniqueArr será [1, 2, 3, 4, 5]const arr = [1, 2, 2, 3, 4, 4, 5]; const seen = new Map(); const uniqueArr = arr.filter(item => { if (!seen.has(item)) { seen.set(item, true); return true; } return false; }); // uniqueArr será [1, 2, 3, 4, 5]
O método usando Set geralmente é o mais eficiente e legível para tipos primitivos. Para objetos, pode ser necessária lógica adicional.