Sobes.tech
Junior

Πώς μπορείτε να διαγράψετε όλα τα διπλότυπα από έναν πίνακα;

sobes.tech AI

Απάντηση από AI

Υπάρχουν αρκετοί κοινώς χρησιμοποιούμενοι τρόποι:

  1. Χρήση 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' }]
    
  2. Χρήση 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]
    
  3. Χρήση 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]
    
  4. Χρήση αντικειμένου/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 τύπους. Για αντικείμενα, μπορεί να χρειάζεται επιπλέον λογική.