我在迭代一个数组并希望执行以下操作:
for (
var i = 0;
i < array.length && !(array[i][1] == 0 && array[i][2] == 'foo');
i++)
{
所以基本上我说&#34;如果我小于数组的长度而且数组[i] 1为0并且数组[i] [2]不正确]是&#39; foo&#39;&#34;然后做一堆东西。
但它不起作用。当array [i] [2]为&#39; foo&#39;时,它总是计算为false,即使array [i] [1]不等于0。
奇怪的是,如果我做这样的for语句:
for (var i = 0; i < array.length; i++) {
...然后把它放在循环的开头:
if (array[i][1] == 0 && array[i][2] == 'foo') continue;
......它有效。因此,当我试图说&#34;如果正确和!(条件1和&amp;&amp;条件2)&#34;那么我必须以某种方式弄乱语法。但我不确定自己做错了什么。我的错误在哪里?
答案 0 :(得分:2)
如果将测试!(array[i][1] == 0 && array[i][2] == 'foo')
放在循环控制表达式中,那么当失败时,循环会停止。它不会跳过该迭代并继续下一个迭代,而不是i < array.length
为假。它就此停止。
如果您希望它继续下一次迭代,您需要将测试放在循环体中并使用continue
。
答案 1 :(得分:0)
所以基本上我说&#34;如果我小于数组的长度而且数组[i] 1为0并且数组[i] [2]不正确]是&#39; foo&#39;&#34;然后做一堆东西。
在javascript中是:
if((i < array.length) && !(array[i][1] == 0) && (array[i][2] == 'foo'))
如果我使用了for
循环中的代码,则if
语句将为:
if(i < array.length && !(array[i][1] == 0 && array[i][2] == 'foo'))
请注意!
之后括号的位置。带有变化的完整for循环将是:
for (var i = 0; (i < array.length) && !(array[i][1] == 0) && (array[i][2] == 'foo'); i++) {