Попробуйте эту функцию перемешивания.
function shuffle(arrParam: any[]): any[]{
let arr = arrParam.slice(),
length = arr.length,
temp,
i;
while(length){
i = Math.floor(Math.random() * length--);
temp = arr[length];
arr[length] = arr[i];
arr[i] = temp;
}
return arr;
}
Это чистая функция, которую можно использовать в любом массиве.
Это создаст новый перетасованный массив с сохранением исходного.
Если вы хотите, чтобы он работал в вашем шаблоне так, чтобы он сортировал this.cards
, вы можете сделать метод компонента shuffle()
, который мутирует this.cards
:
public shuffle(): any[]{
let arr = this.cards.slice(),
length = arr.length,
temp,
i;
while(length){
i = Math.floor(Math.random() * length--);
temp = arr[length];
arr[length] = arr[i];
arr[i] = temp;
}
this.cards = arr;
}
РЕДАКТИРОВАТЬ: я проверил ссылку @wannadream, которую он предоставил в комментарии, и похоже, что моя shuffle
функция, описанная выше, гласит: «Фактический беспристрастный алгоритм случайного перемешивания - это случайный случай Фишера-Йейтса (он же Кнут). Я, должно быть, написал это, используя алгоритм тасования Фишера-Йейтса в качестве ссылки.