Привет! Я работаю с массивом и хочу, чтобы его элементы были перемешаны в случайном порядке.
Вот пример моего массива:
let myNumbers = [1, 2, 3, 4, 5, 6];
Как я могу сделать так, чтобы результат выглядел примерно так:
// Пример результата после перемешивания
[3, 1, 6, 2, 5, 4]
Мне интересно, какие варианты реализации такой функции существуют. Очень хотелось бы, чтобы каждый запуск возвращал разный порядок элементов. Буду признателен за любые советы и примеры кода!
я делаю через простую функцию - создаю новый массив и заполняю случайными элементами из исходного:
function mixArray(arr) {
let result = [];
let temp = [...arr];
while (temp.length > 0) {
let randomIndex = Math.floor(Math.random() * temp.length);
result.push(temp.splice(randomIndex, 1)[0]);
}
return result;
}
Работает отлично, каждый раз новый порядок. Может чуть медленнее fisher-yates, но зато сразу понятно что происходит.
А ты тестировал на больших массивах? У меня были тысячи элементов - разница между алгоритмами была огромная. Fisher-Yates намного быстрее, особенно с большими данными. Какого размера твои массивы обычно?
Ты уже пробовал какие-то варианты? Есть несколько способов сделать это, и мне любопытно, какой подход будет для тебя наиболее оптимальным. Для простоты можно использовать sort с Math.random, хотя это не самый лучший подход. Какой уровень сложности тебе нужен?