Junior
Πώς μπορείτε να διαγράψετε όλα τα διπλότυπα από έναν πίνακα;
sobes.tech AI
Απάντηση από AI
Υπάρχουν αρκετοί κοινώς χρησιμοποιούμενοι τρόποι:
-
Χρήση
Set: Ο πιο σύγχρονος και συνοπτικός τρόπος. ΤοSetαποθηκεύει μόνο μοναδικές τιμές.const arr = [1, 2, 2, 3, 4, 4, 5]; const uniqueArr = [...new Set(arr)]; // uniqueArr θα είναι [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); // Για αντικείμενα, πρέπει να τα μετατρέψουμε σε συμβολοσειρές για σωστή σύγκριση στο Set // uniqueArr θα είναι [{ id: 1, name: 'A' }, { id: 2, name: 'B' }] -
Χρήση
filterκαιindexOf: Φιλτράρισμα του πίνακα, αφήνοντας μόνο τα στοιχεία των οποίων η πρώτη εμφάνιση ταιριάζει με το τρέχον δείκτη.const arr = [1, 2, 2, 3, 4, 4, 5]; const uniqueArr = arr.filter((item, index) => arr.indexOf(item) === index); // uniqueArr θα είναι [1, 2, 3, 4, 5] -
Χρήση
reduce: Δημιουργία νέου πίνακα προσθέτοντας στοιχεία αν δεν υπάρχουν ήδη.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 θα είναι [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], []); // Μικρότερη εκδοχή // uniqueArr θα είναι [1, 2, 3, 4, 5] -
Χρήση αντικειμένου/Map: Δημιουργία προσωρινού αντικειμένου ή
Mapγια την παρακολούθηση των ήδη συναντημένων στοιχείων.const arr = [1, 2, 2, 3, 4, 4, 5]; const seen = {}; const uniqueArr = arr.filter(item => seen.hasOwnProperty(item) ? false : (seen[item] = true)); // uniqueArr θα είναι [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 θα είναι [1, 2, 3, 4, 5]
Η μέθοδος με Set είναι γενικά η πιο αποδοτική και ευανάγνωστη για primitive τύπους. Για αντικείμενα, μπορεί να χρειάζεται επιπλέον λογική.