Возвращая числа, делимые на 3 в массиве, используя цикл For? - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь вернуть на консоль числа, которые делятся на 3 в массиве ниже, используя цикл for, как показано ниже.

Возвращает числа 2-9 в консоль, но не те, которые делятся на 3? Я в тупик? Что я делаю не так?

var numbers = [1,2,3,4,5,6,7,8,9,10]

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

Ответы [ 5 ]

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

ES6

Вы также можете достичь с помощью Оператор унарного отрицания (восклицательный знак) с помощью reduce()

DEMO

var numbers = [1,2,3,4,5,6,7,8,9,10]

console.log(numbers.reduce((r,v)=>!(v%3)?r.concat(v):r,[]))
.as-console-wrapper {max-height: 100% !important;top: 0;}

С помощью filter()

DEMO

var numbers = [1,2,3,4,5,6,7,8,9,10]

console.log(numbers.filter(v=>!(v%3)))
.as-console-wrapper {max-height: 100% !important;top: 0;}
0 голосов
/ 08 мая 2018

Одна вещь, которую вы делаете неправильно, заключается в том, что вы используете i вместо чисел [i], а во-вторых, вы не сравниваете его с 0 . Это должно быть что-то вроде:

var numbers = [1,2,3,4,5,6,7,8,9,10]

for(var i = 0; i < numbers.length; i++) {
    if(numbers[i] % 3==0){
    console.log(numbers[i]);}}
0 голосов
/ 08 мая 2018

var numbers = [1,2,3,4,5,6,7,8,9,10];

numbers.forEach(n => {
  if (n % 3 === 0) console.log(n);
});
0 голосов
/ 08 мая 2018

Проблема в вашем if утверждении. Пожалуйста, смотрите пример.

var numbers = [1,2,3,4,5,6,7,8,9,10]

for(var i = 0; i < numbers.length; i++) {
    if(numbers[i] % 3 === 0){
       console.log(numbers[i]);
    }
}
0 голосов
/ 08 мая 2018

Оператор if разветвляется на основе результата условного оператора. if(i % 3){ вернет true каждый раз, когда результат операции по модулю не 0, потому что любое ненулевое число преобразуется в true.

Заявление должно быть: if(i % 3 === 0){, потому что вы хотите перейти в секцию true, только если вы делите на 3, а остаток равен 0.

Далее, вы используете свой индекс цикла в качестве числа для работы, но вам нужно использовать элемент массива с индексом вашего счетчика цикла numbers[i], а не i.

var numbers = [1,2,3,4,5,6,7,8,9,10]

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

Кроме того, более простой подход здесь может заключаться в использовании Array.filter(), который перебирает массив и возвращает новый массив со значениями, которые вы укажете:

var numbers = [1,2,3,4,5,6,7,8,9,10];

var results = numbers.filter(function(num){
  return num % 3 === 0;
});

console.log(results);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...