Может кто-нибудь указать мне код, чтобы определить, является ли число в JavaScript четным или нечетным?
javascript
Янни Теуниссен
источник
источник
%
операторе, чем&
, и 2. Хотя&
теоретически это быстрее, это действительно не имеет значения .Ответы:
Используйте следующий код:
1 представляет нечетное число, а 0 представляет четное число.
источник
0
или1
(илиNaN
если вы передадите ему что-то, что не является числом и не может быть приведено к одному), что будет хорошо работать в большинстве ситуаций. Но если вам нужен настоящийtrue
илиfalse
:return (num % 2) == 1;
num
не является целым числом. Который все еще будет работать, если вы сравнитеisOdd(1.5)==true
(потому что дробное значение не равноtrue
), но было бы лучше, если бы функция возвращалаtrue
илиfalse
подразумевала имя «isOdd».return !!(num % 2)
чтобы получить логическое значениеИспользуйте побитовый
AND
оператор.Если вам не нужно возвращаемое строковое значение, а скорее логическое, используйте это:
источник
X % Y
!function isEven(n){return !(n & 1);}
.x & 1
Проверяет, установлен ли последний бит в числе (потому что 1 - это число со всеми битами, установленными в 1, за исключением младшего значащего бита. ): Если это число нечетное, иначе даже.Вы могли бы сделать что-то вроде этого:
источник
if (condition) { answer=true; } else { answer=false; }
это просто излишне многословная версияanswer = (bool) condition;
. Снизь свою функциюfunction isEven(value) { return (bool) (value%2 == 0); }
и мы все будем счастливы.(bool)
(чтоreturn value%2 == 0;
приведет к ошибке), и в любом случае вам не нужно: выполнит работу, так как==
оператор возвращает логическое значение.answer = !!(condition)
. Конечно, я хотел сказать, что вы можете простоreturn value%2==0
и не нужно беспокоиться об условном.value%2===0
источник
№ Используйте модуль (%). Это дает вам остаток от двух чисел, которые вы делите.
Это означает, что если вы измените любое число х на 2, вы получите либо 0, либо 1, либо -1. 0 будет означать, что это даже. Все остальное будет означать, что это странно.
источник
Это можно решить с помощью небольшого фрагмента кода:
Надеюсь это поможет :)
источник
Как и во многих языках, в Javascript есть оператор модуля
%
, который находит остаток от деления. Если после деления на 2 остатка нет, число четное:Это очень распространенная идиома для проверки четных чисел.
источник
С побитовым, кодгольфингом:
источник
Простая функция, которую вы можете передать. Использует оператор по модулю
%
:источник
return !(x % 2);
Используйте мои расширения:
затем
== Ложные
== Правда
если вы не уверены, что это число, проверьте его следующим ветвлением:
ОБНОВИТЬ :
если бы вы не использовали переменную:
Производительность :
Оказывается, что процедурная парадигма лучше, чем парадигма ООП. Кстати, я выполнил профилирование в этой FIDDLE . Тем не менее, ООП способ по-прежнему красивее.
источник
Вычтите 2 к нему рекурсивно, пока не достигнете -1 или 0 (очевидно, работает только для натуральных чисел) :)
источник
Вы можете использовать оператор for и условное выражение, чтобы определить, является ли число или серия чисел нечетным:
Это будет печатать каждое нечетное число от 1 до 5.
источник
Только что выполнил этот в Adobe Dreamweaver .. он работает отлично. я использовал, если (isNaN (mynmb))
чтобы проверить, является ли данное значение числом или нет, я также использовал Math.abs (mynmb% 2), чтобы преобразовать отрицательное число в положительное и вычислить
источник
источник
Замените X своим номером (может быть из переменной). Оператор If выполняется, когда число является четным, иначе, если оно нечетное.
Если вы просто хотите узнать, является ли любое заданное число нечетным:
Снова замените X числом или переменной.
источник
Каждое нечетное число при делении на два оставляет остаток как 1, а каждое четное число при делении на ноль оставляет остаток как остаток. Следовательно, мы можем использовать этот код
источник
Как насчет этого...
источник
Это то что я сделал
По какой-то причине мне пришлось убедиться, что длина массива меньше на единицу. Когда я этого не делаю, я получаю «undefined» в последнем элементе массива oddNumbers.
источник
Когда вам нужно проверить, является ли какая-то переменная нечетной, вы должны сначала проверить, является ли она целочисленной . Также обратите внимание, что когда вы вычисляете остаток по отрицательному числу, результат будет отрицательным (
-3 % 2 === -1
).Если Number.isInteger доступен, вы также можете упростить этот код до:
Примечание: здесь мы тестируем,
value % 2 !== 0
аvalue % 2 === 1
не из-за-3 % 2 === -1
. Если вы не хотите-1
проходить этот тест, вам может потребоваться изменить эту строку.Вот несколько тестов:
источник
С помощью
%
поможет вам сделать это ...Вы можете создать несколько функций, чтобы сделать это для вас ... Я предпочитаю отдельные функции, которые не привязаны к числу в Javascript, как это, которое также проверяет, передаете ли вы номер или нет:
нечетная функция:
четная функция:
и назовите это так:
источник
Один вкладыш в ES6 только потому, что он чистый.
const isEven = (num) => num % 2 == 0;
источник
Многие люди неправильно понимают значение странного
isOdd("str")
должно быть ложным.Только целое число может быть нечетным.
isOdd(1.223)
иisOdd(-1.223)
должен быть ложным.Число с плавающей запятой не является целым числом.
isOdd(0)
должно быть ложным.Ноль - это четное целое число ( https://en.wikipedia.org/wiki/Parity_of_zero ).
isOdd(-1)
должно быть правдой.Это странное целое число.
Решение
JS Fiddle (при необходимости): https://jsfiddle.net/9dzdv593/8/
1-лайнер
Javascript 1-лайнер решение. Для тех, кто не заботится о читабельности.
источник
(n % 2) !== 0
вместо(n % 2) === 0
. (2) Мой совет , чтобы избежать!!(n % 2)
, потому что (а) он имеет меньшую производительность , чем(n % 2) !== 0
( jsperf.com/notnot-vs-strict-not ), (б) это хак - это принуждает значение falsey0
вfalse
, и (с) это неясно (языки программирования высокого уровня не должны читать как Паскаль ради производительности - это работа компилятора). (3) Да, пропущенные{}
операторы блока приводят к нескольким проблемам (как обновлено в моем ответе).if (0) call1(), assign = 0, call2()
, Но один оператор не является плохимif (0) return; if (0) ;; if (0); break; if (0) continue;
, и в любом случае я предпочитаю продолжать использовать операторы блока строк, когда долго-линейные условия.isNaN(n)
глупы - что вы покрылиNaN
дело, ноisOdd(null)
,isOdd(undefined)
,isOdd({x:1})
все возвращения ,false
которые я считаю ошибкой; если, конечно, вы только указываете, что ваша функция ведет себя корректно в данном домене: только входы числового типа. В этом случае просто сбросьтеisNaN
чек и заставьте пользователя вызывать его с правильным типом. Оборонительное программирование ужасно. Тогда ваша функция упрощается доisOdd = x => Math.floor(x) === x && x & 1 === 1
- возвращать явныеtrue
илиfalse
значения не нужныnull
,undefined
и объекты{}
не являются нечетными целыми числами, и поэтому функция возвращаетfalse
- не уверен, почему вы считаете это ошибкой.isNaN
Проверка для выполнения (не для защиты), она позволяет функцию выхода преждевременно , без выполнения других проверок.Я бы реализовал это, чтобы вернуть логическое значение:
Он будет работать как на неподписанных, так и на подписанных номерах. Когда модуль вернется
-1
или1
будет переведенtrue
.Немодульное решение:
источник
Более функциональный подход в современном javascript:
источник
в ES6:
const isOdd = num => num % 2 == 1;
источник
источник
это работает для массивов:
это должно выйти из системы: 4,92 1,9,21,41
всего за номер:
это должно выводиться даже на консоль
источник