по сабжу и в целом:
1) поразрядные операции в js не настолько быстрые, как, например, в с++, потому что js-ное "число непойми какого типа" сначала приводится к integer, потом делается поразрядное действие.
2) как уже говорил, цикл+splice очень неэффективный вариант, дает сложность O(N^2)
вот линейный вариант:
https://javascript.ru/forum/misc/685...tml#post450880