【发布时间】:2021-10-04 22:36:03
【问题描述】:
我有以下数组:
var myArray = [BF1,BA1,BF2, BA2, BF3,BA3, BA4, BF4 , BA5, BF5, BF6, BA6, BF7, BA7, BA8, BF8, BA9, BF9,
BF10, BA10, BA11, BF11, BA12, BF12, BA13, BF13, BA14, BF14, BA15, BF15, BA16, BF16, BF17, BA18,
BF18, BA19, BF19, BA20, BF20, BA21, BF21, BF22, BA22, BA23, BF23, BA24, BF24, BA25, BF25, BA26,
BA27, BF27, BA28, BF28, WA29, WA30, WF30, WA31, WA31, WF32, WA32, WF33, WA33, WF34, WA34,
WF35, WA35, WA36, WA37, WA38, WF38, WA39, WF40, WA40, WA41, WF41, WA42, WF42, WF43, WA43,
WF44, WA44, WF45, WA45, WF46, WF46, WA47, WF47, WA48, WF48, WF49, WA49, WA50, WF50, WF51,
WA51];
我使用下面的函数来洗牌,这样shuffle(myArray);
function shuffle(array){
var counter = array.length,
temp, index;
while (counter > 0){
index = Math.floor(Math.random() * counter);
counter = counter-1;
temp = array[counter];
array[counter] = array[index];
array[index] = temp;
}
return array;
但是,我想用概率来洗牌。这样 myArray 中以 B 开头的项目 (BF1,BA1,BF2...BF28) 有 0.8 的概率成为数组中的第一个项目,并且以 W 开头的项目 (WA29,WA30,WF30...WA51)有 0.2 的概率成为数组中的第一项。
我可以使用 math.random 做到这一点吗?还是我应该使用其他东西?
提前致谢!
【问题讨论】:
-
你到底是什么意思?通过“数组中的第一项”,您的意思是仅第一项具有该概率吗?或者每次比较有 0.8 的机会将 B 移动到 W 之前,有 0.2 的机会将 W 移动到 B 之前,如果它们具有相同的第一个字母,则交换项目的机会为 0.5?
-
谢谢,也许这是措辞不当。我基本上使用这个函数从数组中选择一个项目(第一项)。所以另一种思考方式是,我基本上想从这个列表中随机选择一个项目,项目的概率 0.8 以 B 开头,0.2 以 W 开头。
-
如果你有 100 个 B 项和 1 个 W 项怎么办?单个 W 项目是否有 20% 的机会成为第一?还是有 1/401 的机会成为第一?
-
它将有 20% 的概率首先出现。我不打算让函数返回一个数组。就我而言,该函数每次都可以返回一个项目,该项目将有 20% 的概率先有 W,有 80% 的概率先有 B
标签: javascript arrays shuffle