[英]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]);}}
您还可以在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.