繁体   English   中英

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

[英]Returning numbers divisible by 3 within an array using a For Loop?

我试图将数字返回到控制台,在下面的数组中可以被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]);
    }
}

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

该陈述应该是: if(i % 3 === 0){因为如果除以3并且余数为0你只想分支到true部分。

接下来,您使用循环索引作为要操作的数字,但是您需要使用带有循环计数器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]); } } 

此外,这里更简单的方法可能是使用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); 

 var numbers = [1,2,3,4,5,6,7,8,9,10]; numbers.forEach(n => { if (n % 3 === 0) console.log(n); }); 

问题是你的if语句。 请看这个例子。

 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]); } } 

你做错的一件事是你使用的是i而不是数字[i],其次你没有将它与0进行比较。 它应该是这样的:

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]);}}

ES6

您还可以在reduce()帮助下使用一元否定运算符(感叹号 reduce()

DEMO

 var numbers = [1,2,3,4,5,6,7,8,9,10] console.log(numbers.reduce((r,v)=>!(v%3)?r.concat(v):r,[])) 
 .as-console-wrapper {max-height: 100% !important;top: 0;} 

借助filter()

DEMO

 var numbers = [1,2,3,4,5,6,7,8,9,10] console.log(numbers.filter(v=>!(v%3))) 
 .as-console-wrapper {max-height: 100% !important;top: 0;} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM