Методы перетасовки массива в TypeScript: Fisher-Yates, Array.sort(), Lodash и Durstenfeld

Вот несколько методов, которые можно использовать для перетасовки массива в TypeScript:

Метод 1: использование алгоритма перемешивания Фишера-Йейтса (Кнута)

function shuffleArray(array: any[]): any[] {
  const shuffledArray = [...array];
  let currentIndex = array.length;
  while (currentIndex !== 0) {
    const randomIndex = Math.floor(Math.random() * currentIndex);
    currentIndex--;
    [shuffledArray[currentIndex], shuffledArray[randomIndex]] = [
      shuffledArray[randomIndex],
      shuffledArray[currentIndex],
    ];
  }
  return shuffledArray;
}

Метод 2: использование метода Array.sort() с функцией случайного сравнения

function shuffleArray(array: any[]): any[] {
  const shuffledArray = [...array];
  return shuffledArray.sort(() => Math.random() - 0.5);
}

Метод 3. Использование библиотеки lodash (требуется установка)

import * as _ from 'lodash';
const shuffledArray = _.shuffle(array);

Метод 4. Использование алгоритма перетасовки Дюрстенфельда

function shuffleArray(array: any[]): any[] {
  const shuffledArray = [...array];
  for (let i = array.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    [shuffledArray[i], shuffledArray[j]] = [shuffledArray[j], shuffledArray[i]];
  }
  return shuffledArray;
}