Функция Javascript для нахождения кратных числа - PullRequest
0 голосов
/ 15 января 2019

Создайте функцию с именем 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, пожалуйста

Ответы [ 7 ]

0 голосов
/ 15 января 2019

Вы можете использовать метод фильтра для достижения этого:

const multiplesOf = (numbers, multiple) => {
return numbers.filter(x => x % multiple === 0);
}

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

метод filter возвращает массив после фильтрации с указанным вами условием, которое в нашем случае заключается в проверке на кратность.

Вы также пропустили второй аргумент функции, который является кратным.

0 голосов
/ 15 января 2019

Вот функция с одним вкладышем, использующая уменьшение. Я также использовал оператор запятой для возврата результата обр.

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))
0 голосов
/ 15 января 2019

У вас есть несколько проблем с вашим кодом. В настоящий момент multiplesOf принимает только 1 аргумент, когда их должно быть два, то есть массив 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]
0 голосов
/ 15 января 2019

Я полагаю, это то, что вы хотите

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))
0 голосов
/ 15 января 2019

Вам нужно передать второй аргумент функции. Также 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));
0 голосов
/ 15 января 2019

Проблема заключается в следующем: return multiples;

Вы возвращаете одно значение.Функция может возвращать одно значение, поэтому вам нужно будет создать массив, а затем вернуть его

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

console.log(multiplesOf([4, 5, 6, 7, 8], 2));
0 голосов
/ 15 января 2019

Вам необходимо добавить второй параметр в функцию 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...