Javascript 如何确保每两种随机颜色使用两次?

Javascript 如何确保每两种随机颜色使用两次?,javascript,jquery,random,Javascript,Jquery,Random,伙计们,我想得到2种随机颜色,并从这2种选定的颜色中为我的4个div制作背景色 我想知道的是如何确保每种颜色都被用作背景色两次 (在我的代码中,有时我会看到一种随机颜色作为背景色3次。) $(函数(){ 函数getRandomArrayElements(arr、计数){ var shuffled=arr.slice(0), i=平均长度, min=i-计数, 温度、指数; 而(i-->分钟){ 索引=数学层((i+1)*数学随机(); temp=混洗[索引]; 洗牌[索引]=洗牌[索引];

伙计们,我想得到2种随机颜色,并从这2种选定的颜色中为我的4个div制作
背景色

我想知道的是如何确保每种颜色都被用作背景色两次

(在我的代码中,有时我会看到一种随机颜色作为背景色3次。)

$(函数(){
函数getRandomArrayElements(arr、计数){
var shuffled=arr.slice(0),
i=平均长度,
min=i-计数,
温度、指数;
而(i-->分钟){
索引=数学层((i+1)*数学随机();
temp=混洗[索引];
洗牌[索引]=洗牌[索引];
洗牌[i]=临时;
}
返回混洗。切片(最小值);
}
var randomColor1='#'+(Math.random()*0xFFFFFF这个怎么样:

function removeRandomElement(colors) {
  return colors.splice(Math.floor(Math.random() * colors.length), 1)[0];
}

var colors = [randomColor1, randomColor1, randomColor2, randomColor2];

$(".first").css("background-color", removeRandomElement(colors));
$(".second").css("background-color", removeRandomElement(colors));
$(".third").css("background-color", removeRandomElement(colors));
$(".fourth").css("background-color", removeRandomElement(colors));

即使这个答案来得晚了一点,我想告诉你上面代码中的概念错误

您混合了2个随机选择和2个固定选择。因此,3种颜色可能是相同的

// Possible picks: color1 | color2
$(".first").css("background-color", getRandomArrayElements(colors, 1));

// Possible picks: color1 | color2
$(".second").css("background-color", getRandomArrayElements(colors, 1));

// Fix pick: color1
$(".third").css("background-color", randomColor1);

// Fix pick: color2
$(".fourth").css("background-color", randomColor2);
这就是为什么3种颜色可能是相同的。因此,您可以删除上面选择的颜色(如前一个答案所示),或者将所有4种颜色放入一个数组中,将其洗牌,然后逐个选择。(如以下示例所示)

$(函数(){
//问题代码:
// http://stackoverflow.com/questions/6274339/how-can-i-shuffle-an-array-in-javascript
函数洗牌(数组){
让计数器=array.length;
//当数组中有元素时
而(计数器>0){
//选择一个随机索引
让index=Math.floor(Math.random()*计数器);
//将计数器减少1
计数器--;
//并用它交换最后一个元素
设温度=阵列[计数器];
数组[计数器]=数组[索引];
数组[索引]=温度;
}
返回数组;
}
var randomColor1='#'+(Math.random()*0xFFFFFF
函数getRandomArrayElements(arr,计数){
var shuffled=arr.slice(0),
i=平均长度,
min=i-计数,
温度、指数、颜色;
而(i-->分钟){
索引=数学层((i+1)*数学随机();
temp=混洗[索引];
洗牌[索引]=洗牌[索引];
洗牌[i]=临时;
颜色=混洗。切片(最小值);
if(arr.length==getRandomArrayElements[“time”].length)
{
打破
}
如果(getRandomArrayElements[“时间”][color]!=未定义)
{
i++;
}
其他的
{
getRandomArrayElements[“时间”][color]=“1”
}
}
返回颜色;
}

getRandomArrayElements[“time”]=[];
向随机函数添加两个计数器。如果选择了一种颜色,则增加计数器。如果其中一个计数器为2,则只返回另一种颜色