twobomb, получается логика такова: Если при переборе массива попадается первое число, которое не делится на 2, то сразу выдается false, а если число не попадает под этот критерий, выдается true. Верно?
Алексей Уколов, а если сформулировать так - Если при переборе массива попадается первое число, которое не делится на 2, то сразу выдается false, а если при полном прохождении массива все числа делятся на 2, выдается true.
Edhunter, то что я написать можно трактовать как "Есть ли хоть одно нечетное число", и если оно есть то логично что весь массив не может соответствовать условию " наличие только четных чисел". Поэтому при первой встрече нечетного числа возвращает false, дальше массив проверять бесполезно.
Edhunter, Ну потому-что у вас в цикле написано return true. Вынесите за скобки.
Тоесть он заходит в цикл, первая на итерации идёт 2, 2 %2 != 0 это false, тоесть в скобки с return false не заходим идём дальше, а дальше у нас return true выполняем return true всё конец
twobomb, ок с предыдущим примером разобрался. Нашел еще такой вариант, но я не могу понять почему когда пишется if (i % 2), то код работает, а когда if (i % 2 == 0) не работает, по сути же задается условие - если число делится на 2
function num(arr) {
for (let i of arr) {
if (i % 2) {
return false;
}
}
return true;
}
console.log(num([1, 4, 6]));
console.log(num([128, 4, 6]));
Edhunter, Ну потому что при такой записи i % 2 происходит неявное преобразование к булеву типа поидее. А в JS 0 == false, а все остальные числа true.
Тоесть к примеру если if(1 % 2) то это условие верно потому-что 1%2 = 1 а 1 это true,
А условие if(1 %2 == 0) это условие не верно, потомучто 1 %2 = 1, а 1 не равно 0.
Ну можешь сам явно преобразовать любое значение в bool и посмотреть типа alert(new Boolean(1%2));
В js фолсом считается 0, пустая строка '', null и другие крч поищи в инете Falsy
P.S. Вообще в js много всяких странных вещей, про которые если не знать, то можно налажать что потом хрен найдешь причину. Поэтому лучше программировать на более низкоуравневых языках, там уже и строгая типизация и чуть что-то не так напишешь сразу ошибка ломающая всё.
Потому что как только вы встречаете чётное число, вы возвращаете true вне зависимости от того, что там было до него и будет после. Т.е. ваша функция проверяет, фактически, есть ли в массиве хотя бы одно чётное число.
Ну попробуйте подумать, описать свой алгоритм просто русским языком, но с использованием конструкций языка. Я могу, конечно, вам код написать, а вы можете нагуглить решение этой задачи одним запросом, но у вас же цель - научиться, а не получить функцию, которая чётные от нечётных отделяет, верно?