如何选择一个包含n个成员的javascript数组的随机成员,使每个选择尽可能远离前3个选择?

如何选择一个包含n个成员的javascript数组的随机成员,使每个选择尽可能远离前3个选择?,javascript,jquery,arrays,random,Javascript,Jquery,Arrays,Random,假设有一个包含50个元素的数组。每次选择一个随机元素时(所有选定的元素仍有资格在后续迭代中重新选择),是否有方法确保这些新选择与之前选择的三个项目尽可能“远”?当然,这对于前三个迭代来说并不重要 我所说的“远”是指前3个选项中尽可能远的距离 我不确定我是否有意义,所以请随意纠正我可能显示的任何误解。如果我理解得很好,您需要取最后3个值,按值排序,获取两个数字之间的最大差值,并返回它们之间的中间数 主要的逻辑是这样的- var lastThreeNumbers = [...]; lastThree

假设有一个包含50个元素的数组。每次选择一个随机元素时(所有选定的元素仍有资格在后续迭代中重新选择),是否有方法确保这些新选择与之前选择的三个项目尽可能“远”?当然,这对于前三个迭代来说并不重要

我所说的“远”是指前3个选项中尽可能远的距离


我不确定我是否有意义,所以请随意纠正我可能显示的任何误解。

如果我理解得很好,您需要取最后3个值,按值排序,获取两个数字之间的最大差值,并返回它们之间的中间数

主要的逻辑是这样的-

var lastThreeNumbers = [...];
lastThreeNumbers.sort();
var nextNumber;
if (lastThreeNumbers[1] - lastThreeNumbers[0] > lastThreeNumbers[2] - lastThreeNumbers[1]) {
   var diff = lastThreeNumbers[1] - lastThreeNumbers[0] / 2;
   nextNumber = lastThreeNumbers[0] + diff;
}
else {
   var diff = lastThreeNumbers[2] - lastThreeNumbers[1] / 2;
   nextNumber = lastThreeNumbers[1] + diff;
}
编辑:


另一方面,您还需要考虑0和50,因此您将有一个包含5个值的数组(最后3个值,0和50)。但主要逻辑是相同的。

以下是我试图生成此类输出的代码:

var arrayRandom=[“A”、“B”、“C”、“D”、“E”、“F”、“G”];
var firstHit=0,
secondHit=1,
第三位=2,
随机指数;
函数checkPrevious(){
while(randomIndex==firstHit | | randomIndex==secondHit | | randomIndex==thirdHit){
randomIndex=Math.floor(Math.random()*arrayRandom.length);
}
}
函数generateInitialRandomIndex(){
对于(变量i=0;i<3;i++){
randomIndex=Math.floor(Math.random()*arrayRandom.length);
开关(一){
案例0:
checkPrevious();
firstHit=随机指数;
警报(firstHit+:“+arrayRandom[firstHit]);
打破
案例1:
checkPrevious();
二次命中=随机指数;
警报(第二次命中+”:“+arrayRandom[secondHit]);
打破
案例2:
checkPrevious();
thirdHit=随机指数;
警报(第三名+“:“+arrayRandom[thirdHit]);
打破
}
}
}
$(“button.generate random index”)。单击(函数(){
生成初始随机索引();
});

打我

前三个选择是否也必须尽可能分散?到目前为止您尝试了什么?在随机选择了前三个值后,您可以选择其他数字,使其不是随机的,而是尽可能成为“最远”的数字?@Zenoo理想情况下,是的。谢谢你的回复。如果我知道怎么做,我就不会在这里问了。感谢您的回复。请使用ES6+和箭头功能进行操作