【问题标题】:creating a function that only returns odd numbers [duplicate]创建一个只返回奇数的函数[重复]
【发布时间】:2021-04-22 22:46:05
【问题描述】:

我在这个问题上花了很多时间才意识到我的功能只有 50% 的时间是正确的。所以这里的目标是只返回两个参数之间所有数字的奇数。 (例如,如果参数是 1 和 5,我需要返回 2 和 3)我编写的函数完全依赖于第一个参数。如果它是偶数,我的函数将返回赔率,但如果第一个数字是奇数,它将返回偶数。有谁知道我该如何解决这个问题?

function oddNumbers(l, r) {
  const arr = [];
  const theEvens = [];
    for (let i= l; i<r; i++) {
      arr.push(i)
    }
  console.log(arr)
  for (let i= 0; i < arr.length; i+= 2 ) {
      const evens = arr[0] + i;
      theEvens.push(evens);
  }
  theEvens.forEach(item => arr.splice(arr.indexOf(item), 1));
  console.log(arr)
}

oddNumbers(2, 20);

【问题讨论】:

  • "只返回奇数""需要返回 2 & 3" - 2 是奇数吗?
  • 你的函数永远不会测试数组的元素是偶数还是奇数。

标签: javascript


【解决方案1】:

我稍微修改了代码,只返回奇数

我们使用% operator,其行为类似于数学中的余数运算符:

所以当我们说 i % 2 如果数字是偶数,则运算结果将为 0

但当“i”为奇数时,结果将为 1

所以现在我们可以使用这个操作从奇数中过滤偶数

function oddNumbers(l, r) {
  const arr = [];
    for (let i= l; i<r; i++) {
      if(i % 2 !== 0) arr.push(i);
    }
  console.log(arr);
}

oddNumbers(2, 20);

【讨论】:

  • 虽然这个解决方案有效,但它主要是代码,并没有解释它为什么有效。如果您扩展了 op 在他们的代码中没有使用的 remainder operator 的使用,将会有所帮助。
  • 添加了一个简短的解释
【解决方案2】:

您可以从初始参数循环到结束参数并使用模数获得奇数,试试这个:

let result = [];
let returnOdd = (n1, n2) => {
    for(i = n1; i < n2; i++){
        if(i % 2 != 0){
            result.push(i)
        }
    }
    return result;
}

console.log(returnOdd(2, 20));

【讨论】:

    【解决方案3】:

    您可以使用filter 方法。

    此方法根据它所具有的条件创建一个新数组。在这种情况下,它将遍历数组中的所有数字,并检查数字是否为奇数(尽管remainder operator)。

    例如:

    1 % 2 = 1 ( true, keep in the new array )
    2 % 2 = 0 ( false ignore in the new array ) 
    

    function OddNumbers(start, end) {
      // Create an array from the given range
      const nums = Array(end - start + 1).fill().map((_, idx) => start + idx);
      // Use filter to return the odd numbers via the % operator
      return nums.filter(num => num % 2);
    }
    
    console.log(OddNumbers(2,20))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-12
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      • 2014-01-03
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      相关资源
      最近更新 更多