While循环逻辑JavaScript

While循环逻辑JavaScript,javascript,arrays,while-loop,Javascript,Arrays,While Loop,我试图理解while循环中语句块的逻辑。我理解while循环的表达式,只要“idx”不等于-1。将idx值推入索引数组 我难以理解的语句是“idx=array.indexOf(element,idx+1);” idx是否在每次迭代后都会增加,因为它增加了1 如果有人能帮我理解逻辑,我将不胜感激。 我很困惑,因为idx被分配给array.indexOf(element) 以下代码段来自 var指数=[]; 变量数组=['a','b','a','c','a','d']; var元素='a'; va

我试图理解while循环中语句块的逻辑。我理解while循环的表达式,只要“idx”不等于-1。将idx值推入索引数组

我难以理解的语句是“idx=array.indexOf(element,idx+1);”

idx是否在每次迭代后都会增加,因为它增加了1

如果有人能帮我理解逻辑,我将不胜感激。 我很困惑,因为idx被分配给array.indexOf(element)

以下代码段来自

var指数=[];
变量数组=['a','b','a','c','a','d'];
var元素='a';
var idx=array.indexOf(元素);
while(idx!=-1){
指数推送(idx);
idx=array.indexOf(元素,idx+1);
}
控制台日志(索引);

//[0,2,4]
@dvenkatsagar的答案很接近

这一点

var array = ['a', 'b', 'a', 'c', 'a', 'd'];
var idx = array.indexOf(element);
将变量idx初始化为
0
。因为“a”的数组索引为0

然后循环开始

while (idx != -1) { // This first tests to make sure there is at least one position for a
  indices.push(idx); // pushes that first index position 0 into the array
  idx = array.indexOf(element, idx + 1); //starts the search again at indexOf position 1... because it was just at 0 and found the 'a' element
}
所以基本上, 如果这是数组。
var数组=['1','a','a','a','1','m']

var idx=array.indexOf(element)
,将首先返回“1”

所以idx!=-1和推动开始

编辑:澄清while循环的退出。


只要while循环到达这个新数组的第4个位置
indexOf(元素,4)然后返回-1退出while循环。

indexOf语句使数组像字符串一样工作。看看indexOf是如何工作的。你会发现,只要还有一个“a”可以找到,它就会保持正值。看看:你甚至可以在(~idx)的时候做
while{
谢谢Chris!你的解释帮了我的忙。我还有第二个问题。当表达式的计算结果为false时,while循环似乎会执行语句。这是否正确?当while循环达到'b'时,它的计算结果为-1。我认为此时while循环会中断,但不会。它会继续在ar中迭代ray。我有点困惑。我认为while循环只有在表达式的计算结果为true时才会运行。@Recon这实际上是不正确的。indexOf()将继续搜索整个字符串,直到它找到一个“a”。在本例中,当idx!=0时,您不会在字符串中循环。indexOf会为您执行循环。另外-1!=false.false==0.true==1Gotcha!感谢您的时间和帮助。=)