Junior
Come eliminare tutti i duplicati da un array?
sobes.tech AI
Risposta dell'AI
Esistono diversi metodi comuni:
-
Utilizzo di
Set: Il metodo più moderno e conciso.Setmemorizza solo valori unici.const arr = [1, 2, 2, 3, 4, 4, 5]; const uniqueArr = [...new Set(arr)]; // uniqueArr sarà [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); // Per gli oggetti, è necessario convertirli in stringhe per un confronto corretto in Set // uniqueArr sarà [{ id: 1, name: 'A' }, { id: 2, name: 'B' }] -
Utilizzo di
filtereindexOf: Filtrare l'array lasciando solo gli elementi la cui prima occorrenza corrisponde all'indice corrente.const arr = [1, 2, 2, 3, 4, 4, 5]; const uniqueArr = arr.filter((item, index) => arr.indexOf(item) === index); // uniqueArr sarà [1, 2, 3, 4, 5] -
Utilizzo di
reduce: Creare un nuovo array aggiungendo gli elementi se non sono già presenti.const arr = [1, 2, 2, 3, 4, 4, 5]; const uniqueArr = arr.reduce((acc, curr) => { if (!acc.includes(curr)) { acc.push(curr); } return acc; }, []); // uniqueArr sarà [1, 2, 3, 4, 5]const arr = [1, 2, 2, 3, 4, 4, 5]; const uniqueArr = arr.reduce((acc, curr) => acc.includes(curr) ? acc : [...acc, curr], []); // Variante più corta // uniqueArr sarà [1, 2, 3, 4, 5] -
Utilizzo di oggetto/Map: Creare un oggetto temporaneo o
Mapper tracciare gli elementi già incontrati.const arr = [1, 2, 2, 3, 4, 4, 5]; const seen = {}; const uniqueArr = arr.filter(item => seen.hasOwnProperty(item) ? false : (seen[item] = true)); // uniqueArr sarà [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 sarà [1, 2, 3, 4, 5]
Il metodo con Set è generalmente il più performante e leggibile per tipi primitivi. Per gli oggetti, potrebbe essere necessaria una logica aggiuntiva.