Как получить все элементы без пары с bitwise xor?

Как адаптировать данный код что бы он выводил все числа без пары:

const array = [1, 3, 3, 1, 8, 9, 9]

console.log(array.reduce((acc, cur) => acc ^ cur, 0))

сейчас он работает нормально для одного числа и выводит 8 (что верно), потому что у этого числа нет пары как у остальных (1 и 1, 3 и 3, и так далее). Как доработать даную логику xor для того что бы получать все числа без пары из исходного массива в новый массив используя логику с xor выше?

Исходный массив [1, 3, 3, 1, 8, 9, 9, 7]

Результат [8, 7]


Ответы (1 шт):

Автор решения: vsemozhebuty

Не знаю, можно ли с xor, но без него и без сортировки можно так:

const arr = [1, 3, 3, 1, 8, 9, 9, 7];

const singles = [...arr.reduce(
  (acc, element) => {
    if (acc.has(element)) acc.delete(element);
    else acc.add(element);
    return acc;
  },
  new Set(),
)];

console.log(singles);

Или чуть короче и чуть менее ясно:

const arr = [1, 3, 3, 1, 8, 9, 9, 7];

const singles = [...arr.reduce(
  (acc, element) => acc.delete(element) ? acc : acc.add(element),
  new Set(),
)];

console.log(singles);

→ Ссылка