Случайный выбор одной из 4-х функций JS

111
25 июля 2019, 17:10

Есть код, в нем описаны 4 типа движения вверх, вниз, влево, вправо (это 4 отдельные ф-и). Помогите написать функцию, которая будет выбирать случайную из них и вызывать её

Answer 1

function up() { 
  console.log("Moving Up..."); 
} 
 
function down() { 
  console.log("Moving Down..."); 
} 
 
function left() { 
  console.log("Moving Left..."); 
} 
 
function right() { 
  console.log("Moving Right..."); 
} 
 
let funcs = [up, down, left, right]; 
funcs[Math.random() * 4 | 0]();

2 последние строчки. Помещаем интересующие 4 функции в массив, затем обращаемся к случайному элементу массива (Math.random() * 4 | 0 означает случайное целое число от 0 до 3 включительно) и вызываем полученную функцию при помощи круглых скобок.

И да, если Вам нужна именно функция, то вот

function up() { 
  console.log("Moving Up..."); 
} 
 
function down() { 
  console.log("Moving Down..."); 
} 
 
function left() { 
  console.log("Moving Left..."); 
} 
 
function right() { 
  console.log("Moving Right..."); 
} 
 
// просто обборачиваем функцией moveSomewhere, ничего особенного 
function moveSomewhere() { 
  return [up, down, left, right][Math.random() * 4 | 0](); 
} 
 
moveSomewhere();

В принципе, если есть желание/необходимость, можно объединить все это в одну строку (как я и поступил в примере выше).

Если у Вас всего 4 функции движения (вверх, вниз, влево и вправо), то следующий более абстрактный подход может быть и излишен, но тем не менее иногда лучше продумать все наперед. А мало ли потом еще перемещения по диагоналям добавить решите?

function up() { 
  console.log("Moving Up..."); 
} 
 
function down() { 
  console.log("Moving Down..."); 
} 
 
function left() { 
  console.log("Moving Left..."); 
} 
 
function right() { 
  console.log("Moving Right..."); 
} 
 
function invokeRandomFunc() { 
  return arguments[Math.random() * arguments.length | 0](); 
} 
 
invokeRandomFunc(up, down, left, right);

Answer 2

Передавайте randomFunc функции (без круглых скобок) в качестве аргументов.

function randomFunc(...funcs) {
        // Функция генератор случайных чисел
        const getRandomInt = (min, max) => {
            min = Math.ceil(min);
            max = Math.floor(max);
            return Math.floor(Math.random() * (max - min + 1)) + min;
        }
        // Генерируем случайное число из количества функций
        const indexFunc = getRandomInt(0, funcs.length-1);
        // Вызываем функцию
        funcs[indexFunc]();
    }

Пример

randomFunc(up, down, left, right);
READ ALSO
Получение JSON по ссылке

Получение JSON по ссылке

Я работаю над ботом в discord js и Visual Studio Code

142
Как найти Max для INT UNSIGNED в MySQL?

Как найти Max для INT UNSIGNED в MySQL?

Как найти "SELECT MAX(Поле типа INT UNSIGNED) FROM" для поля типа INT UNSIGNED в MySQL? Получаю ошибку "4294967295 is not a valid value for field 'MAX(ID)'The allowed range is 0 to 2147483647"

144
Как мне подсоединить Slave MySQL server?

Как мне подсоединить Slave MySQL server?

У меня есть продакшен база данныхОстанавливать её нельзя

112
Почему псевдоклассы не работают в Google Chrome и IE

Почему псевдоклассы не работают в Google Chrome и IE

(!!!Есть похожая тема, но я не нашёл в ней ответы на свои вопросы, поэтому огромная просьба не помечать мой вопрос как дубликат!!!)

134