为什么这个简单的.js在一次迭代后停止循环?

时间:2016-02-25 14:36:00

标签: javascript arrays

我试图制作一个简单的小.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);

5 个答案:

答案 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());
      }
    }