Chupurnov Valeriy
Chupurnov Valeriy
Front End Engineer

Стабильный random на JS

В JS есть такой замечательный метода Math.random, он возвращает число от 0 до 1. И незаменим там, где нужно что-то продемонстрировать на случайных данных.

const points = [];
for (let i = 0; i < 1000; i += 1) {
   points.push({
      x: 1024 * Math.random(),
      y: 756 * Math.random(),
   });
}

Такой код создаст 1000 точек на условной плоскости 1024 на 756. И каждый раз точки будут на разных местах. Это не всегда удобно для отладки.

В Pascal у нас был ручной запуск генератора случайных чисел. Т.е. пока ты не написал в своем коде, вызов магического метода, все числа которые генерирует рандом, будут воспроизводимыми.

В JS ничего подобного нет. Но мы может воспользоваться идеей seed.

const seed = (s) => () => {
    s = Math.sin(s) * 10000;
    return s - Math.floor(s);
};

const rnd = seed(10000);

Переменная s глобальная. Теперь rnd всегда возвращает одни и те же, псевдослучайные числа. Пример выше будет переписан так:

const points = [];
for (let i = 0; i < 1000; i += 1) {
   points.push({
      x: 1024 * rnd(),
      y: 756 * rnd(),
   });
}