Как получить все элементы без пары с 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);