Массив сортировки Javascript с использованием дня месяца

Я хочу изменить порядок строки в зависимости от того, какой день месяца.

Например, произнесите слово «ПИЦЦА», 1 мая это будет «ZZSIPA», а 2 мая это будет «APIZZS» и т. д.

Код, который я запускаю, работает для Math.random(), однако, когда я присваиваю ему значение дня месяца, оно не меняется.

    const dayOfMonth = new Date().getDate();

function shuffle(s) {
    
  var arr = s.split(''); 

for (let i = arr.length -1; i > 0; i--) {
  let j = Math.floor(dayOfMonth * i)
  let k = arr[i]
  arr[i] = arr[j]
  arr[j] = k
}
    
  s = arr.join(''); 
  return s; // Return shuffled string
    
}
var s = shuffle("PIZZAS");
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
35
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Math.random() возвращает число с плавающей точкой от 0 до 1, new Date().getDate() возвращает целое число от 1 до 31, поэтому, если вы хотите получить такое же поведение, вы должны разделить день месяца на 31.

Но обратите внимание, что этот генератор псевдослучайных чисел не очень хорош, и вы, вероятно, получите менее предсказуемые результаты с чем-то из вопрос о посеве генератора случайных чисел JS.

Что не так с Math.random()? Кроме того, что я не могу раздать его, я никогда ничего не слышал об этом плохой

J-Cake 10.04.2022 14:18

@ J-Cake, хорошо, вопрос в том, чтобы засеять RNG текущим днем ​​​​месяца, не так ли?

Samuel Olekšák 10.04.2022 14:22

Думал, вы имели в виду сам ГСЧ :/

J-Cake 10.04.2022 14:23

Да, поэтому мне по существу нужен 31 разный порядок массива

Sam 10.04.2022 14:23

Используя «Math.sin(dayOfMonth++) * 10000», проблема решена.

var dayOfMonth = new Date().getDate();

function random() {
    var x = Math.sin(dayOfMonth++) * 10000;
    return x - Math.floor(x);
}

function shuffle(s) {
    
  var arr = s.split(''); 

for (let i = arr.length -1; i > 0; i--) {
  let j = Math.floor(random() * i)
  let k = arr[i]
  arr[i] = arr[j]
  arr[j] = k
}
    
  s = arr.join(''); 
  return s; // Return shuffled string
    
}
var s = shuffle("PIZZAS");

Ваша перетасовка не удалась, потому что вы меняете undefined.

Я отладил ваш код, реализация функции shuffle(s) осталась неизменной.

А shuffle_new(s) решит проблему замены undefined с помощью модульный оператор: let j = Math.floor(dayOfMonth * i) % arr.length, чтобы arr[j] никогда не возвращал значение undefined.

<!DOCTYPE html>
<html lang = "en">

<head>
    <meta charset = "UTF-8">
    <meta http-equiv = "X-UA-Compatible" content = "IE=edge">
    <meta name = "viewport" content = "width=device-width, initial-scale=1.0">
    <title>Shuffle Demo</title>
</head>

<body>
    <script>
        const writeln = (text = '') => document.writeln(text + '<br/>');
    </script>
    <script>
        const dayOfMonth = new Date().getDate();

        function shuffle(s) {
            var arr = s.split('');
            for (let i = arr.length - 1; i >= 0; i--) {
                writeln();
                let j = Math.floor(dayOfMonth * i)
                writeln('j:' + j);
                let k = arr[i]
                writeln('k:' + k);
                arr[i] = arr[j]
                writeln('arr[j]:' + arr[j]);
                arr[j] = k
                writeln('arr:' + arr);
            }

            s = arr.join('');
            return s; // Return shuffled string

        }

        function shuffle_new(s) {
            var arr = s.split('');
            for (let i = arr.length - 1; i >= 0; i--) {
                writeln();
                let j = Math.floor(dayOfMonth * i) % arr.length
                writeln('j:' + j);
                let k = arr[i]
                writeln('k:' + k);
                arr[i] = arr[j]
                writeln('arr[j]:' + arr[j]);
                arr[j] = k
                writeln('arr:' + arr);
            }

            s = arr.join('');
            return s; // Return shuffled string
        }

        writeln('dayOfMonth:' + dayOfMonth);
        writeln('process: shuffle("PIZZAS")');
        var s = shuffle("PIZZAS");
        writeln('output:' + s);

        writeln();
        writeln();
        writeln();
        writeln();
        writeln('process: shuffle_new("PIZZAS")');
        var s = shuffle_new("PIZZAS");
        writeln('output:' + s);
    </script>
</body>

</html>

Другие вопросы по теме