返回的数字使用For循环在数组中可被3整除?

Cal*_*Cap 3 javascript arrays loops

我试图将数字返回到控制台,在下面的数组中可以被3整除,使用for循环,如下所示.

它将数字2-9返回到控制台,但不是可被3整除的数字?我很难过?我究竟做错了什么?

var numbers = [1,2,3,4,5,6,7,8,9,10]

for(var i = 0; i < numbers.length; i++) {
    if(i % 3){
       console.log(numbers[i]);
    }
}
Run Code Online (Sandbox Code Playgroud)

Sco*_*cus 10

if语句根据条件语句的结果进行分支.if(i % 3){true随时返回模运算的结果,0因为任何非零数字都会转换为true.

该陈述应该是: if(i % 3 === 0){因为true如果你除以3而剩下的就是你只想分支到该部分0.

接下来,您使用循环索引作为要操作的数字,但是您需要将数组项与循环计数器的索引一起使用numbers[i],而不是i.

var numbers = [1,2,3,4,5,6,7,8,9,10]

for(var i = 0; i < numbers.length; i++) {
    if(numbers[i] % 3 === 0){
       console.log(numbers[i]);
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,这里可以使用更简单的方法Array.filter(),它在数组上循环并返回一个包含您指定值的新数组:

var numbers = [1,2,3,4,5,6,7,8,9,10];

var results = numbers.filter(function(num){
  return num % 3 === 0;
});

console.log(results);
Run Code Online (Sandbox Code Playgroud)

  • *"`if(i%3){`将始终返回'true`,因为每个数字都可被3整除."*`Boolean(3%3)=> false` ...;) (3认同)
  • 另外,你过滤回调应该只是`return num%3 === 0;`. (2认同)
  • @FelixKling谢谢.我有一个不同的解决方案需要,然后将其更改为`.filter()`,但没有. (2认同)