Získejte všechny nejedinečné hodnoty (tj. duplicitní/více než jeden výskyt) v poli

Potřebuji zkontrolovat pole JavaScriptu, abych zjistil, zda existují nějaké duplicitní hodnoty. Jaký je nejjednodušší způsob, jak to udělat? Potřebuji jen zjistit, co jsou duplicitní hodnoty – ve skutečnosti nepotřebuji jejich indexy ani kolikrát jsou duplikovány.

Vím, že mohu procházet polem a zkontrolovat shodu všech ostatních hodnot, ale zdá se, že by měl existovat jednodušší způsob.

Podobná otázka:

  • Získejte všechny jedinečné hodnoty v poli JavaScriptu (odstraňte duplicity)

Odpověď

Pole můžete seřadit a poté jej projít a poté zjistit, zda je další (nebo předchozí) index stejný jako aktuální. Za předpokladu, že je váš třídicí algoritmus dobrý, mělo by být menší než O(n 2 ):

const findDuplicates = (arr) => {
  let sorted_arr = arr.slice().sort(); // You can define the comparing function here. 
  // JS by default uses a crappy string compare.
  // (we use slice to clone the array so the
  // original array won't be modified)
  let results = [];
  for (let i = 0; i < sorted_arr.length - 1; i++) {
    if (sorted_arr[i + 1] == sorted_arr[i]) {
      results.push(sorted_arr[i]);
    }
  }
  return results;
}

let duplicatedArray = [9, 9, 111, 2, 3, 4, 4, 5, 7];
console.log(`The duplicates in ${duplicatedArray} are ${findDuplicates(duplicatedArray)}`);

V případě, že se chcete vrátit jako funkce pro duplikáty. Toto je pro podobný typ případu.

Reference:https://stackoverflow.com/a/57532964/8119511