Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript循环从数组中随机选取_Javascript_Arrays_Loops - Fatal编程技术网

JavaScript循环从数组中随机选取

JavaScript循环从数组中随机选取,javascript,arrays,loops,Javascript,Arrays,Loops,我对此有点问题。我想在每次加载弹出窗口时从数组中随机选取单词。但是这个词没有改变。我总是得到如下结果: (march, march, march.. january, january, january, january, january)... 它只是选择随机月份,然后在每个循环中使用它。我想让它在每个循环中都是随机的。有人能帮我吗 vari; 对于(i=0;i=5)return;//所有迭代都已完成 var rand=myArray[Math.floor(Math.random()*myA

我对此有点问题。我想在每次加载弹出窗口时从数组中随机选取单词。但是这个词没有改变。我总是得到如下结果:

(march, march, march.. january, january, january, january, january)...
它只是选择随机月份,然后在每个循环中使用它。我想让它在每个循环中都是随机的。有人能帮我吗

vari;
对于(i=0;i<5;i++){
$(“#通知”).fadeIn(“慢”).delay(1000).fadeOut(“慢”);
var myArray=['一月'、'二月'、'三月'];
var rand=myArray[Math.floor(Math.random()*myArray.length)];
document.getElementById(“通知”).innerHTML=rand;
}
//$(“#通知”)。追加(兰特)
#通知{
位置:固定;
底部:5px;
左:5px;
宽度:170px;
/*如果空间可用,则设置为100%*/
高度:70像素;
z指数:105;
文本对齐:居中;
字体大小:正常;
字体大小:12px;
颜色:白色;
背景色:#FF7800;
盒影:0 10px#222;
填充物:5px;
不透明度:0.7;
过滤器:α(不透明度=70);
/*适用于IE8及更早版本*/
}
#通知span.驳回{
边框:2倍实心#FFF;
填充:0 5px;
光标:指针;
浮动:对;
右边距:10px;
}
#通知a{
颜色:白色;
文字装饰:无;
字体大小:粗体
}

X

您的
for
循环在动画开始之前立即完成,因此您只能看到最后生成的随机值

相反,在进行下一次迭代之前,您需要等待动画每次完成。这可以通过一个回调参数来实现,即
fadeOut

var myArray=['一月'、'二月'、'三月'];
(函数循环(i){
if(i>=5)return;//所有迭代都已完成
var rand=myArray[Math.floor(Math.random()*myArray.length)];
document.getElementById(“通知”).textContent=rand;
//使用淡出的回调参数链接到下一个迭代
//当动画完成时
$(“#通知”).fadeIn(“慢”).delay(1000).fadeOut(“慢”,loop.bind(null,i+1));
})(0); // 立即使用i=0执行循环功能
#通知{
位置:固定;
底部:5px;
左:5px;
宽度:170px;/*如果空间可用,则设置为100%*/
高度:70像素;
z指数:105;
文本对齐:居中;
字体大小:正常;
字体大小:12px;
颜色:白色;
背景色:#FF7800;
盒影:0 10px#222;
填充物:5px;
不透明度:0.7;
过滤器:alpha(不透明度=70);/*适用于IE8及更早版本*/
}
#通知span.驳回{
边框:2倍实心#FFF;
填充:0 5px;
光标:指针;
浮动:对;
右边距:10px;
}
#通知a{
颜色:白色;
文字装饰:无;
字体大小:粗体
}

X

通过for循环为动画添加延迟

但是,所有随机值都是在第一个刻度处计算的

var i;
var myArray = ['January', 'February', 'March','April','May']; 
for (i = 0; i < 5; i++) { 
$("#notification").fadeIn("slow").delay(1000).fadeOut("slow");

setTimeout(function(){
var rand = myArray[Math.floor(Math.random() * myArray.length)];
  document.getElementById("notification").innerHTML = rand;
  // slow refer to 600ms, 600*2+1000 = 2200
  },2200*i);
}
vari;
var myArray=['一月'、'二月'、'三月'、'四月'、'五月'];
对于(i=0;i<5;i++){
$(“#通知”).fadeIn(“慢”).delay(1000).fadeOut(“慢”);
setTimeout(函数(){
var rand=myArray[Math.floor(Math.random()*myArray.length)];
document.getElementById(“通知”).innerHTML=rand;
//慢速指600ms,600*2+1000=2200
},2200*i);
}

不应在同步循环中执行异步操作(使用动画显示/隐藏元素)。这将导致不必要的行为。那么我该怎么办?我真的很绝望