Javascript: создание и хранение случайных дро без замены - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь использовать Javascript для создания массива, взять два уникальных случайных отрисовки из массива, а затем назначить нарисованные значения в таблицу HTML. Мой подход состоял в том, чтобы создать массив, взять случайный случай, создать новый массив без нарисованного значения, а затем взять случайный ничья из нового массива как способ взять два случайных ничьих без замены.

Я привел минимальный пример того, что я сделал для достижения этой цели, но он не работает. Мне бы хотелось, чтобы значения, назначенные таблице HTML, в конечном итоге представляли собой два уникальных значения (например, «a», «b») из массива foo. Разве это не работает, потому что значение == bar_a ниже не удалит значение, присвоенное массиву bar_a, потому что bar_a является массивом, а не значением массива?

Хотя в этом посте рассматривал рисование без замены, в нем не приводится пример использования строк и не объясняется, как сохранить оба числа, и неясно, почему они используют splice() вместо * 1012. *

    // Define array containing the set of values we'll randomly assign to A or B
    var foo = ["a", "b", "c", "d"];

    // Initialize variables to hold the value for A and B
    var bar_a=  [""];
    var bar_b=  [""];

    // Randomly draw from foo, save for A
    bar_a =foo[Math.floor(Math.random()*foo.length)];

    // Remove the drawn value from the array, create new array
    var foo_filtered = array.filter(function(value, index, arr){
        return value == bar_a;
        });

    // Randomly draw from foo_filtered, save for B
    bar_b = foo_filtered[Math.floor(Math.random()*foo_filtered.length)];

    // Assign attributes and values to their placeholders (a1, b1) in a HTML table
     document.getElementById("a1").innerHTML = bar_a;
     document.getElementById("b1").innerHTML = bar_b;

1 Ответ

1 голос
/ 01 апреля 2019

Ваша логика состояния фильтра обратная.Вы хотите значения, которые не равны bar_a.

Вам также необходимо изменить array.filter на foo.filter

    // Define array containing the set of values we'll randomly assign to A or B
    var foo = ["a", "b", "c", "d"];

    // Initialize variables to hold the value for A and B
    var bar_a=  [""];
    var bar_b=  [""];

    // Randomly draw from foo, save for A
    bar_a =foo[Math.floor(Math.random()*foo.length)];

    // Remove the drawn value from the array, create new array
    var foo_filtered = foo.filter(function(value, index, arr){
        return value !== bar_a;
                  // ^^ not equal
        });

    // Randomly draw from foo_filtered, save for B
    bar_b = foo_filtered[Math.floor(Math.random()*foo_filtered.length)];

    // Assign attributes and values to their placeholders (a1, b1) in a HTML table
     document.getElementById("a1").innerHTML = bar_a;
     document.getElementById("b1").innerHTML = bar_b;
A: <span id="a1"></span>   B: <span id="b1"></span>
...