Svelte - Как я могу случайным образом перетасовать выбранные параметры с помощью кнопки?

Я пытаюсь создать кнопку, которая будет перетасовывать параметры моих выбранных раскрывающихся элементов с помощью Svelte.

Идея, в конце концов, заключалась бы в том, чтобы иметь несколько списков выпадающих меню и позволить пользователю выбирать, какой из них он хочет заполнить вручную, а какой просто перетасовать, не вмешиваясь.

Пока у меня есть это, это не работает:

<script>
    let chifumi_1 = [
        { id: 1, text: 'Paper' },
        { id: 2, text: 'Rock' },
        { id: 3, text: 'Scissor' }
    ];
    let chifumi_2 = [
        { id: 1, text: `Paper` },
        { id: 2, text: `Rock` },
        { id: 3, text: `Scissor` }
    ];
    let chifumi_3 = [
        { id: 1, text: `Paper` },
        { id: 2, text: `Rock` },
        { id: 3, text: `Scissor` }
    ];

    function shuffle(a) {
    var j, x, i;
    for (i = a.length - 1; i > 0; i--) {
        j = Math.floor(Math.random() * (i + 1));
        x = a[i];
        a[i] = a[j];
        a[j] = x;
    }
    return a;
    }
</script>

<form class = "pl-2">
    <select bind:value = {chifumi_1}>
        {#each chifumi_1 as chifumi_1}
        <option value = {chifumi_1}>
            {chifumi_1.text}
        </option>
        {/each}
    </select>
    <select bind:value = {chifumi_2}>
        {#each chifumi_2 as chifumi_2}
        <option value = {chifumi_2}>
            {chifumi_2.text}
        </option>
        {/each}
    </select>
    <select bind:value = {chifumi_3}>
        {#each chifumi_3 as chifumi_3}
        <option value = {chifumi_3}>
            {chifumi_3.text}
        </option>
        {/each}
    </select>
</form>

<button 
    style = "border: 1px solid;"
    on:click = {shuffle(chifumi_1)}
    on:click = {shuffle(chifumi_2)}
    on:click = {shuffle(chifumi_3)}>
        Chifumi Randomizer
</button>

Для функции перемешивания я использовал первый ответ на этот запрос

Кто-нибудь может мне помочь?

Поведение ключевого слова "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) для оценки ваших знаний,...
0
0
112
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы теряете реактивность, потому что модифицируете объект без использования присваивания. Функция уже снова возвращает массив, поэтому вы, вероятно, могли бы исправить это, добавив присваивание в обработчик:

on:click = {() => chifumi_1 = shuffle(chifumi_1)}

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