【问题标题】:Javascript function for finding multiples of a number用于查找数字的倍数的 Javascript 函数
【发布时间】:2019-01-15 05:19:41
【问题描述】:

创建一个名为 mulitples0f 的函数 它将接受两个参数,第一个是数字数组,第二个是数字。该函数应返回一个新数组,该数组由参数数组中的每个数字组成,这些数字是参数数字的倍数。所以 multiplesOf([5,6,7,8,9,10],3) 将返回 [6,9]

function multiplesOf(numbers) {
  var multiples = numbers[0];

  for (var i = 0; i < numbers.length; i++) {
    if (numbers[i] % multiples === 0) {
      multiples = numbers[i];
    }
  }

  return multiples;
}

console.log(multiplesOf([4, 5, 6, 7, 8], 2));

请在jsbin帮助中定义函数

【问题讨论】:

  • 这个功能有什么问题?它不输出正确的值吗?是否有语法错误等?
  • 我必须重新提交这个我没有提交所有代码我很抱歉

标签: javascript function


【解决方案1】:

您的代码存在一些问题。目前multiplesOf 只接受一个参数,当它应该是两个时,即numbers 数组和单个number

您的另一个问题是您没有保留找到的倍数的数组,而是将变量设置为找到的倍数,并且在找到新的倍数时被覆盖(因此留下最后一个找到的倍数在数组中)。相反,您想将 multiples 变量更改为数组。这样你就可以push在这个数组中找到每个倍数。

请参阅下面的工作示例(阅读代码 cmets 以了解更改):

function multiplesOf(numbers, number) { // add second argument
  var multiples = []; // change to array (so that we can store multiple numbers - not just one multiple)
  for (var i = 0; i < numbers.length; i++) {
    if (numbers[i] % number === 0) { // divide by the number
      multiples.push(numbers[i]); // add the current multiple found to the multiples array
    }
  }

  return multiples;
}

console.log(multiplesOf([4, 5, 6, 7, 8], 2)); // Output: [4, 6, 8]

或者,如果您乐于使用高阶函数,您也可以使用.filter() 来获取您的新数组。 .filter() 接受一个函数作为其第一个参数,该函数将 element 作为其参数。它会将您返回 true 的任何元素保留在您的新数组中:

const multiplesOf = (numbers, number) => numbers.filter(n => !(n % number));
console.log(multiplesOf([4, 5, 6, 7, 8], 2)); // [4, 6, 8]

【讨论】:

    【解决方案2】:

    您可以使用过滤器方法来实现:

    const multiplesOf = (numbers, multiple) => {
    return numbers.filter(x => x % multiple === 0);
    }
    
    console.log(mulitplesOf([4, 5, 6, 7, 8], 2));
    

    过滤器方法将在使用您指定的条件过滤后返回数组,在我们的例子中是检查倍数。

    您还缺少函数的第二个参数,即倍数。

    【讨论】:

      【解决方案3】:

      问题是这样的:return multiples;

      您正在返回单个值。函数可以返回单个值,因此您必须创建一个数组然后返回它

      function multiplesOf(numList, num) {
        return numList.filter(function(n) { return n % num === 0; })
      }
      
      console.log(multiplesOf([4, 5, 6, 7, 8], 2));

      【讨论】:

        【解决方案4】:

        您需要将第二个参数传递给函数。也不需要var multiples = numbers[0];。然后,您不想做multiples = numbers[i];,而是将正确的值推送到数组中

        function multiplesOf(numbers, num) {
          var multiples = []
        
          for (var i = 0; i < numbers.length; i++) {
            if (numbers[i] % num === 0) {
              multiples.push(numbers[i]);
            }
          }
        
          return multiples;
        }
        
        console.log(multiplesOf([4, 5, 6, 7, 8], 2));

        或者你也可以使用 array.reduce 函数

        function mulitplesOf(arr, num) {
        
          return arr.reduce((acc, curr) => {
            if (curr % num === 0) {
              acc.push(curr)
            }
            return acc;
          }, [])
        
        }
        
        console.log(mulitplesOf([4, 5, 6, 7, 8], 2));

        【讨论】:

        • .filter 更适合此类操作
        【解决方案5】:

        我认为这是你想要的

        var result = []
        
        function arrMul(arr, value) {
          for (var i = 0; i < arr.length; i++) {
            if (arr[i] % value === 0) {
              result.push(arr[i])
            }
        
          }
          return result
        }
        console.log(arrMul([4, 5, 6, 7, 8], 2))

        【讨论】:

          【解决方案6】:

          这是一个使用 reduce 的单行函数。我还使用逗号运算符返回结果 arr。

          var multiplesFn = (numberArr, num ) => numberArr.reduce((arr, curVal) => ( curVal%num == 0 && arr.push(curVal), arr),[])
          
          console.log(multiplesFn([2,33,34,22,44,6,8], 2))

          【讨论】:

            【解决方案7】:

            您需要将第二个参数添加到函数multiplesOf(numbers, divider)。您可以简单地创建一个数组并将倍数推送到该数组并返回该数组。

            function multiplesOf(numbers, divider) {
              // create an empty array
              var  multiples = []
              for (var i = 0; i < numbers.length; i++) {
                if (numbers[i] % divider === 0) {
                 // push multiples to the array
                  multiples.push(numbers[i]);
                }
              }
             // return the array
              return multiples;
            }
            
            console.log(multiplesOf([4, 5, 6, 7, 8], 2));
            

            【讨论】:

              【解决方案8】:
              console.log(sum(10));
              function sum(limit) {
                  let sum = 0;
              
                      for (let i = 0; i <= limit; i++)
                          if (i % 3 === 0 || i % 5 === 0)
                              sum += i;
              
                  return sum;
              }
              
              //enjoyit
              

              【讨论】:

              • 虽然此代码可能会为问题提供解决方案,但最好添加有关其工作原理/方式的上下文。这可以帮助未来的用户学习并将这些知识应用到他们自己的代码中。在解释代码时,您也可能会以赞成票的形式从用户那里获得积极的反馈。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2020-08-22
              • 2018-09-17
              • 1970-01-01
              • 2018-02-14
              • 2021-09-02
              • 2017-05-30
              • 2012-10-15
              相关资源
              最近更新 更多