Давайте разберемся
copy.push(array.splice(i, 1)[0]);
в том порядке, в котором оно "выполнено"
array.splice(i, 1);
array.splice(n, m)
удаляет m
элементы, начиная с индекса n
и возвращает этиудалил элементы как массив ... так что в этом случае вы получите массив длиной 1 - назовем его x
, заменив x
на array.splice(i, 1)
в исходном коде, теперь у нас есть
copy.push(x[0]);
x[0]
- это единственный элемент, удаленный из array
, который помещается в массив copy
, чтобы предотвратить поступление массива входящих мутировал
function shuffle(array) {
var copy = [], n = array.length, i;
array = array.slice();
// rest of code
}
Кстати, вы могли бы также сделать
copy.push(array.splice(i, 1).pop());
или
copy.push(array.splice(i, 1).shift());