【问题标题】:Insert variable to array using .push() based on outcome of conditional statement根据条件语句的结果使用 .push() 将变量插入数组
【发布时间】:2017-12-17 12:29:01
【问题描述】:

我有一个包含生成数字 0-9 的 for 循环的脚本。该脚本还包括一个检查由 for 循环生成的数字是否可被 3 或 5 整除的函数。如果它们可被整除(例如 9 可被 3 整除),则 if/else 语句返回 true,如果它们是不可整除,条件语句返回 false。

我想要实现的是,当条件语句返回true时,应该将数字添加到一个空数组中。

在这种情况下,期望的结果是:

var myArray = [0, 3, 5, 6, 9];

这是我当前的代码:

var isDivisibleArray = [];

for(var i = 0; i < 10; i++) {
    isMultiple(i);
}

function isMultiple() {

    var isMultipleOf3 = i % 3;
    var isMultipleOf5 = i % 5;

    if(isMultipleOf3 === 0 || isMultipleOf5 === 0) {
        return true;
    }

    else {
        return false;
    }

}

isMultiple();

我正在使用模运算符来确定一个数字是否可以被 3 或 5 整除,例如,如果 x % 3 = 0,x 可以被 3 整除。

我也做了一些实验。如果我这样做是 for 循环,我可以设法使用警报打印结果:

for(var i = 0; i < 10; i++) {
    alert(isMultiple(i));
}

结果是 T,F,F,T,F,T,T,F,F,T。

我也在条件语句中尝试过这种方法:

if(isMultipleOf3 === 0 || isMultipleOf5 === 0) {
    isDivisibleArray.push(i);
}

这没有成功。非常感谢所有帮助!

【问题讨论】:

  • 你到底为什么要调用isMultiple()?
  • 调用函数,否则它不会运行,对吧?
  • 旁注:更改顺序。首先是最大的 5,然后是 3
  • 你为什么要调用另一个函数?为什么不直接做呢? jsfiddle.net/r2vbgm33 或者,如果您只想要数字数组:jsfiddle.net/r2vbgm33/1 另外,关于第一条评论,您正在循环中调用函数。最后你不需要再次调用它。
  • 旁注,您没有在函数内部接收i 作为参数

标签: javascript arrays for-loop if-statement


【解决方案1】:

这应该可行:

var isDivisibleArray = [];

for(var i = 0; i < 10; i++) {
    if(isMultiple(i)) {
      isDivisibleArray.push(i);
    }
}

function isMultiple(i) {
    return i % 5 === 0 || i % 3 === 0
}

【讨论】:

    【解决方案2】:

    不需要单独的功能。此外还有以下内容:

    if(isMultipleOf3 === 0 || isMultipleOf5 === 0) {
        return true;
    }
    
    else {
        return false;
    }
    

    可以简单写成:

    return isMultipleOf3 === 0 || isMultipleOf5 === 0;
    

    整个解决方案如下:

    var isDivisibleArray = [];
    
    for(var i = 0; i < 10; i++) {
        if (i%3 === 0 || i%5 === 0) isDivisibleArray.push(i);
    }
    
    console.log(isDivisibleArray); //[ 0, 3, 5, 6, 9 ]
    

    【讨论】:

    • true,但将 isMultiple 作为一个函数保持它对扩展开放
    • @AyushGupta 这违反了 YAGNI 原则en.wikipedia.org/wiki/You_aren%27t_gonna_need_it 并且考虑到它是一行代码,这尤其令人震惊
    • 我更喜欢遵循 ​​SOLID 原则,特别是依赖倒置原则。 en.wikipedia.org/wiki/SOLID_(object-oriented_design)
    • 如果你把isMultiple作为一个函数,if只知道isMutliple应该返回一个真值,不关心逻辑
    • @AyushGupta 你方式过度设计了这个---p.s.不再回复
    【解决方案3】:

    错误是您实际上并没有推送到数组,只是调用函数进行检查 - 但随后您忽略了结果。

    您可以将这段代码放在一个可以使用不同参数调用的函数中,从而使代码更短且可重用

    function createArray(min = 0, max = 9, divisibleBy = [3, 5]) {
      return [...Array(max + 1).keys()]
        .filter(e => e >= min && divisibleBy.some(i => e % i === 0))
    }
    
    console.log(createArray());
    // same as createArray(0, 9, [3, 5])

    【讨论】:

      【解决方案4】:
          let isDivisibleArray = [];
      
      for(var i = 0; i < 10; i++) {
        if(isMultiple(i)=== true){  
        isDivisibleArray.push(i)
      }
      }
      
      function isMultiple(i) {
      
          var isMultipleOf3 = i % 3;
          var isMultipleOf5 = i % 5;
      
          if(isMultipleOf3 === 0 || isMultipleOf5 === 0) {
      
            return true;
          }
      
          else {
              return false;
          }
      
      }
      

      试试这个

      【讨论】:

        猜你喜欢
        • 2018-10-14
        • 1970-01-01
        • 2017-09-06
        • 1970-01-01
        • 2019-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多