Javascript пройти через массив и найти кратное 3 и выдать число - PullRequest
0 голосов
/ 12 мая 2018

Я хотел бы просмотреть массив и найти наименьшее значение, кратное 3, и либо вернуть значение, либо вернуть false.

Я отсортировал массив по размеру числа, а затем использую оператор по модулю.

Это то, что у меня есть, но, похоже, это не работает. Вот мой код:

function firstMultipleOf3(numbers) {
    numbers.sort(function(a, b){return a - b});
    console.log(numbers);
    for (var i = 0 ; i < firstMultipleOf3.length ; i++) {
        if (firstMultipleOf3[i] % 3 === 0) {
            return [i];
        } else {
            return false;
        }
    }
}

console.log(firstMultipleOf3([52,98,42,17,33,24])); // 42
console.log(firstMultipleOf3([38,52,34,13,41]));    // false

Ответы [ 4 ]

0 голосов
/ 12 мая 2018
  • Создайте обобщенную функцию и назовите ее.
  • Сортировать массив, используя .sort()
  • Используйте .find() для поиска кратного переданного значения в массиве. Этот метод вернет значение, которое проходит тест, реализованный функцией обратного вызова или null.
  • Используйте || для явного возврата false в случае, если .find() возвращает undefined.

Демо-версия:

let findMultipe = (a, m) => a.sort((a, b) => (a - b))
                             .find((n) => (n % m == 0)) || false;

console.log(findMultipe([52, 98, 42, 17, 33, 24], 3));
console.log(findMultipe([38, 52, 34, 13, 41], 3));
0 голосов
/ 12 мая 2018

const numbers = [52, 98, 42, 17, 33, 24];
const find = numbers => numbers.sort((a, b) => a - b).find(n => n % 3 === 0) || false;
const selected = find(numbers)
console.log(selected);
console.log(find([38, 52, 34, 13, 41]));
0 голосов
/ 12 мая 2018

В вашем цикле for вы используете имя функции вместо имени массива (чисел) для теста. Кроме того, вы делаете это в своем условии if. И в выходных данных примера вам нужны числа [i], а не сам индекс.

0 голосов
/ 12 мая 2018

Вы хотите вернуть false, если нет элемента соответствует. Поэтому он должен быть вне цикла:

for (var i = 0; i < numbers.length; i++) 
  if (numbers[i] % 3 === 0) 
    return numbers[i];

return false;

Как бы я это сделал:

function firstMultipleOf3(numbers) {
  let minimum = false;
  for(const n of numbers) 
    if(!(n % 3) && (!minimum || n < minimum))
       minimum = n;
   return minimum;
}
...