побитовые операторы не ясно, что происходит - PullRequest
0 голосов
/ 15 февраля 2019

Я видел это решение, но не понимаю, как оно работает:

const data = [17, 17, 3, 17, 17, 17, 17];
const stray = nums => nums.reduce((a, b) => a ^ b);

const res = stray(data);
console.log(res);

Может кто-нибудь объяснить, что происходит с оператором сокращения?

1 Ответ

0 голосов
/ 16 февраля 2019

Если вам необходимо понять, что делает метод stray(), он в основном выполняет операцию XOR с элементами массива, которые не могут быть соединены с дубликатом.Подробнее вы можете прочитать один из комментариев к вашему вопросу:

XOR имеет свойство, которое a ^ 0 == a и a ^ a == 0, поэтому дублированные элементы в массиве превращаются в0 во время этого процесса.

И из этой ссылки:

https://rohan -paul.github.io / javascript / 2017/01/28 / Bitwise_XOR_Operators_in_JavaScript /

Может использоваться для решения следующей задачи: По заданному массиву найти int, которое появляется нечетное число раз.Всегда будет только одно целое число, которое встречается нечетное число раз.

ИСПЫТАНИЯ:

const data1 = [17, 17, 3, 10, 10, 3, 3];
const data2 = [1, 1, 3, 1, 1, 4, 4, 4, 4];
const data3 = [1, 2, 3, 1, 2, 1, 2, 1, 2];

const stray = nums => nums.reduce((a, b) => a ^ b);

console.log(stray(data1));
console.log(stray(data2));
console.log(stray(data3));
...