我试图制作一个简单的小.js程序,它会随机化一系列英语单词,以便我可以将它们翻译成俄语单词:
var vocab_array_1 = ["end/distance", "hour/o'clock", "voice/vote", "city", "water", "table", "child", "force/strength", "father", "woman"];
for (var i = 0; i < vocab_array_1.length + 3; i++){
var random_index = vocab_array_1[Math.floor(Math.random() * vocab_array_1.length)];
/*random_array.push(random_index);*/
var random_array = [];
random_array[i] = random_index;
}
但它只是在一次迭代后返回random_array [i]的结果。您可以看到我尝试使用.push()方法构建一个新数组,但意识到此方法返回数组,从而停止for循环。
删除后,我无法弄清楚为什么for循环在一次通过后停止运行。
注意:我确定javascript有随机化数组的方法;我试图为学习目的手工编写方法。
编辑:
我执行了建议的更改,但无法获取随机数组以登录到控制台。以下是修订后的代码:
var vocab_array_1 = ["end/distance", "hour/o'clock", "voice/vote", "city", "water", "table", "child", "force/strength", "father", "woman"];
var random_array = [];
for (var i = 0; i < vocab_array_1.length + 3; i++){
var random_index = vocab_array_1[Math.floor(Math.random() * vocab_array_1.length)];
random_array.push(random_index);
}
console.log(random_array);
答案 0 :(得分:3)
移动此行
var random_array = [];
到顶部,因为它在每一轮都被初始化。
答案 1 :(得分:1)
您的代码应该是这样的
var vocab_array_1 = ["end/distance", "hour/o'clock", "voice/vote", "city", "water", "table", "child", "force/strength", "father", "woman"];
var random_array = [];
for (var i = 0; i < vocab_array_1.length + 3; i++){
var random_index = vocab_array_1[Math.floor(Math.random() * vocab_array_1.length)];
random_array.push(random_index);
//random_array[i] = random_index;
}
在循环外部初始化数组。
答案 2 :(得分:1)
如前面的回答中所述,在for
循环之前移动数组初始化:
var random_array = [];
但也要改变
random_array[i] = random_index;
到
random_array.push(random_index);
// or
random_array[random_array.length] = random_index;
要获得您正在寻找的随机播放效果。
答案 3 :(得分:1)
如果要对数组的每个元素执行代码,除非有必要这样做需要for,否则请确保可以使用array.forEach()
代替for
。
vocab_array_1.forEach(
function (element, index, array) {
var random_index = vocab_array_1[Math.floor(Math.random() * vocab_array_1.length)];
random_array.push(random_index);
});
答案 4 :(得分:0)
“我的答案”适用于来这里搜索类似于“执行一次循环停止”之类的人
如果您的循环在执行一次后停止,则可能是您嵌套了循环,并且错误地确定了作用域: 参见示例
functionA = async()=>{
for (i = 0; i<count; i++) {
....
....
}
}
functionB = async () =>{
for (i=0;i<length; i++){
result.push(await functionA());
}
}
functionB();
函数B i
中的两个函数现在都具有全局作用域。
如果您的情况与您的情况相似,请scope正确处理,并且可以正常工作。
functionB = async () =>{
for (var i=0;i<length; i++){ // < ---------------- Note 'var'
result.push(await functionA());
}
}