JavaScript函数用于找到一个数的倍数

4
创建一个名为multiplesOf的函数。 它将接受两个参数,第一个参数将是一个数字数组,第二个参数将是一个数字。 该函数应返回一个由参数数组中与参数数字的倍数相符的每个数字组成的新数组。 因此,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中定义了,请帮忙。

你在这个函数方面遇到了什么问题?它没有输出正确的值吗?还是有语法错误等等? - Hussain Ali Akbar
我需要重新提交,因为我没有提交所有的代码。对此我深表歉意。 - Dalton
10个回答

11

你的代码有几个问题。目前,multiplesOf只接受一个参数,而实际上应该是两个,即numbers数组和单个number

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

请参考以下能正常工作的示例(查看代码注释以了解更改):

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]


3
你可以使用过滤方法来实现这个功能。
const multiplesOf = (numbers, multiple) => {
return numbers.filter(x => x % multiple === 0);
}

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

filter 方法将通过指定条件筛选数组,并返回筛选后的数组,我们这里的条件是检查是否为倍数。

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


2
问题在于: return multiples; 你只返回了一个值。函数只能返回一个值,所以你需要创建一个数组并返回它。

function multiplesOf(numList, num) {
  return numList.filter(function(n) { return n % num === 0; })
}

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


2
你需要将第二个参数传递给函数。另外,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));

或者,您还可以使用数组的reduce函数:

function multiplesOf(arr, num) {

  return arr.reduce((acc, curr) => {
    if (curr % num === 0) {
      acc.push(curr)
    }
    return acc;
  }, [])

}

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


“.filter” 更适合这样的操作。 - Rajesh

2

我猜您想要的是这个

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))


2
这是一个使用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))


1
你需要在函数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));

0
这段代码适用于不想添加数组的人。我知道问题要求两个参数,一个数组和一个用于倍数的数字,但是如果没有数组,可以这样做。
function multiples(limit, n) {
    return Array(limit).fill(0).map((v,i)=>{return (i+1)%n===0 ? i+1 : 0}).filter(v=>v!=0)
}

ES6 有点让人困惑,对吧? 首先,让我来解释一下代码中的 map 函数。

Array.prototype.map = (callback) {
    let out = []
    this.forEach((v)=>{
        out.push(callback(v))
    }
    return out
}

基本上,它在数组中的每个值上运行一个函数,并返回一个包含函数结果的新数组。
过滤器非常简单。它将传递给您值和索引,您可以对其运行函数。如果函数返回 true,则包括该值,但如果返回 false,则从正在创建的新数组中排除该值。

0

有很多方法可以找到。您可以使用数组的 reduce 或 filter 方法。我认为 filter 方法是最容易找到它的方法。

const multiplesOf = (array, num) =>{
return array.filter(item => item % num === 0)
}
console.log(multiplesOf ([4, 5, 6, 7, 8], 2)) // you will get[4,6,8]

0
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

虽然这段代码可能提供了问题的解决方案,但最好添加上为什么/如何运作的上下文。这可以帮助未来的用户学习,并将这些知识应用到他们自己的代码中。当代码被解释时,您还可能会得到用户的积极反馈,例如点赞。 - borchvm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接