Creo que debería ir un
break luego de
myarray.splice(i, 1) para salir del bucle y ya no se siga buscando coincidencias, claro, siempre y cuando no hayan más coincidencias, lo cual no parece ser el caso, de otro modo, debe quedar como está.
Buen algoritmo,
marlanga.