Метод .splice() портит оригинальный массив. Как этого избежать?
При присваивании копируется ссылка на массив, а не сам массив. Чтобы скопировать массив, есть варианты:

var copy = arr.slice();

var copy = arr.concat();

var copy = [...arr];

var copy = Array.from(arr);
Описание SpliceМетод splice() изменяет содержимое массива, удаляя существующие элементы и/или добавляя новые.
Оператор присваивания в данном случае присваивает ссылку на объект, соответственно, все действия по этой ссылке приводят к модификации самого объекта. В данном случае нужно делать реальную копию, например с помощью 
JSON.parse(JSON.stringify)
Lodash.clone()