【问题标题】:Returning numbers divisible by 3 within an array using a For Loop?使用For循环返回数组中可被3整除的数字?
【发布时间】:2018-05-08 17:37:50
【问题描述】:

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

它将数字 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 语句的循环索引,而不是numbers 数组中的数字。我假设您宁愿检查数组中的数字,看看它是否能被 3 整除
  • 在这种情况下你的逻辑是错误的。您的 'var i' 不代表 numbers 数组中的数字。您的 if 语句应该找到搜索 numbers[i] % 3 == 0
  • 您的代码查找位置不能被 3 整除的数字

标签: javascript arrays loops


【解决方案1】:

if 语句根据条件语句的结果进行分支。只要模运算的结果不是0if(i % 3){ 就会返回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);

【讨论】:

  • 你也可以if(!(i % 3)) {
  • "if(i % 3){ 将始终返回 true,因为每个数字都可以被 3 整除。" Boolean(3 % 3) =&gt; false ... ;)
  • 另外,你过滤回调应该只是return num % 3 === 0;
  • @FelixKling 谢谢。我有一个不同的解决方案需要它,然后将其更改为 .filter(),但不需要。
  • 第一句话仍然不正确。 i % 3 并不总是真实的(如我的第一条评论所示)。
【解决方案2】:

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

numbers.forEach(n => {
  if (n % 3 === 0) console.log(n);
});

【讨论】:

    【解决方案3】:

    问题在于您的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]);
        }
    }

    【讨论】:

    • 感谢您的回复,已解决。 :)
    • @CaliCap 你真的很亲密。有时你会得到隧道视觉,需要第二双眼睛来捕捉这些东西。 :)
    【解决方案4】:

    您做错的一件事是您使用 i 而不是 numbers[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]);}}
    

    【讨论】:

    • 谢谢。感谢您的帮助。
    【解决方案5】:

    ES6

    您也可以在reduce()的帮助下使用一元否定运算符(感叹号)来实现

    演示

    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()的帮助下

    演示

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-24
      • 1970-01-01
      • 2021-04-24
      • 1970-01-01
      • 2019-09-29
      • 2015-12-23
      相关资源
      最近更新 更多