Jeśli masz tablicę z prymitywnymi wartościami jak poniżej;

const arr = [1, 2, 3, 4, 45, 4, 66, 3];

Czy istnieje bardziej wydajny sposób, aby sprawdzić, czy wszystkie przedmioty są wyjątkowe, a nie iterowanie wszystkich przedmiotów jak poniżej?

let newArr = [];
let isUnique = true;
arr.forEach(item => 
{
   if(newArr.indexOf(item) != -1)
   {
       isUnique = false;
       break;
   }
   newArray.push(item);
});
2
Christie 17 październik 2020, 05:53

1 odpowiedź

Najlepsza odpowiedź

indexOf w forEach O(n ^ 2). Zamiast tego użyłem zestawu - Set.has O(1) (ogólna złożoność O(n)):

const allAreUnique = (arr) => {
  const set = new Set();
  for (const item of arr) {
    if (set.has(item)) return false;
    set.add(item);
  }
  return true;
};
const allAreUnique = (arr) => {
  const set = new Set();
  for (const item of arr) {
    if (set.has(item)) return false;
    set.add(item);
  }
  return true;
};
console.log(allAreUnique([1, 2, 3, 4, 45, 4, 66, 3]));
console.log(allAreUnique([1, 2, 3, 4, 45, 66]));
4
CertainPerformance 17 październik 2020, 02:54