我正在尝试使用Javascript创建数组,从数组中进行两次唯一随机绘制,然后将绘制的值分配给HTML表。我的方法是创建一个数组,随机抽取,创建一个不包含绘制值的新数组,然后从新数组中抽取一个随机抽取,作为进行两次随机抽取而不替换的方式。
我提供了一个完成此操作的最小示例,但是它不起作用。我希望分配给HTML表的值最终是foo数组中的两个唯一值(例如“ a”,“ b”)。 这是行不通的,因为下面的value == bar_a不会删除分配给bar_a数组的值,因为bar_a是一个数组而不是该数组的 value ?
尽管this post解决了没有替换的图形问题,但没有提供使用字符串或解释如何保存两个数字的示例,目前尚不清楚为什么它们使用splice()
而不是{{1 }}
filter()
答案 0 :(得分:1)
您的过滤条件逻辑倒退。您希望不等于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>