Как определить, является ли число нечетным в JavaScript



может ли кто-нибудь указать мне на какой-то код, чтобы определить, является ли число в JavaScript четным или нечетным?

611   26  

26 ответов:

используйте следующий код:

function isOdd(num) { return num % 2;}
console.log("1 is " + isOdd(1));
console.log("2 is " + isOdd(2));
console.log("3 is " + isOdd(3));
console.log("4 is " + isOdd(4));

1 представляет собой нечетное число, в то время как 0 представляет собой четное число.

использовать побитовое AND оператора.

function oddOrEven(x) {
  return ( x & 1 ) ? "odd" : "even";
}

Если вы не хотите возвращать строковое значение, а скорее логическое, используйте это:

var isOdd = function(x) { return x & 1; };
var isEven  = function(x) { return !( x & 1 ); };

вы могли бы сделать что-то вроде этого:

function isEven(value){
    if (value%2 == 0)
        return true;
    else
        return false;
}
function isEven(x) { return (x%2)==0; }
function isOdd(x) { return !isEven(x); }

Я должен сделать массив действительно большой, который имеет много четных чисел

О боже нет. Используйте модуль (%). Это дает вам остаток от двух чисел, которые вы делите.

Ex. 2 % 2 = 0 because 2/2 = 1 with 0 remainder.

Ex2. 3 % 2 = 1 because 3/2 = 1 with 1 remainder.

Ex3. -7 % 2 = -1 because -7/2 = -3 with -1 remainder.

это означает, что если вы измените любое число x на 2, вы получите либо 0, либо 1, либо -1. 0 будет означать, что он даже. Все остальное будет означать, что это странно.

Это можно решить с помощью небольшого фрагмента кода:

function isEven(value) {
    if (value%2 == 0)
    return true;
else
    return false;
}

надеюсь, что это помогает :)

Как и многие языки, Javascript имеет оператор модуля %, которая находит остаток от деления. Если после деления на 2 нет остатка, то число четное:

// this expression is true if "number" is even, false otherwise
(number % 2 == 0)

это очень распространенная идиома для тестирования четных целых чисел.

простая функция, которую вы можете передать. Использует оператор по модулю % и тернарный оператор ?.

var is_even = function(x) {
    return !(x % 2); 
}

is_even(3)
false
is_even(6)
true

использовать мои расширения :

Number.prototype.isEven=function(){
     return this % 2===0;
};

Number.prototype.isOdd=function(){
     return !this.isEven();
}

затем

var a=5; 
 a.isEven();

==False

 a.isOdd();

= = True

если вы не уверены, что это число, проверьте его следующим ветвлением:

if(a.isOdd){
    a.isOdd();
}

обновление :

если вы не будете использовать переменную :

(5).isOdd()

производительность :

оказывается, что процедурная парадигма лучше, чем парадигма ООП . Кстати, я выступал профилирование в этой скрипке . Однако, путь ООП все еще самый красивый .

enter image description here

С побитовым, codegolfing:

var isEven=n=>(n&1)?"odd":"even";

вычесть 2 к нему рекурсивно, пока вы не достигнете либо -1 или 0 (работает только для положительных целых чисел, очевидно):)

вы можете использовать оператор for и условие, чтобы определить, является ли число или серия чисел нечетными:

for (var i=1; i<=5; i++) 
if (i%2 !== 0) {
    console.log(i)
}

это выведет каждое нечетное число между 1 и 5.

только что выполнил это в Adobe Dreamweaver..it работает отлично. я использовал if (isNaN(mynmb))

чтобы проверить, является ли данное значение числом или нет, и я тоже использовал математика.abs (mynmb%2) чтобы преобразовать отрицательное число в положительное и вычислить

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

</head>
<body bgcolor = "#FFFFCC">
    <h3 align ="center"> ODD OR EVEN </h3><table cellspacing = "2" cellpadding = "5" bgcolor="palegreen">
        <form name = formtwo>
            <td align = "center">
                <center><BR />Enter a number: 
                    <input type=text id="enter" name=enter maxlength="10" />
                    <input type=button name = b3 value = "Click Here" onClick = compute() />
                      <b>is<b> 
                <input type=text id="outtxt" name=output size="5" value="" disabled /> </b></b></center><b><b>
                <BR /><BR />
            </b></b></td></form>
        </table>

    <script type='text/javascript'>

        function compute()
        {
          var enter = document.getElementById("enter");
          var outtxt = document.getElementById("outtxt");

          var mynmb = enter.value;
          if (isNaN(mynmb)) 
          { 
            outtxt.value = "error !!!"; 
            alert( 'please enter a valid number');
            enter.focus();
            return;
          }
          else 
          { 
             if ( mynmb%2 == 0 ) { outtxt.value = "Even"; }  
             if ( Math.abs(mynmb%2) == 1 ) { outtxt.value = "Odd"; }
          }
        }

    </script>
</body>
</html>
   <script>
        function even_odd(){
            var num =   document.getElementById('number').value;

            if ( num % 2){
                document.getElementById('result').innerHTML = "Entered Number is Odd";
            }
            else{
                document.getElementById('result').innerHTML = "Entered Number is Even";
            }
        }
    </script>
</head>
<body>
    <center>
        <div id="error"></div>
        <center>
            <h2> Find Given Number is Even or Odd </h2>
            <p>Enter a value</p>
            <input type="text" id="number" />
            <button onclick="even_odd();">Check</button><br />
            <div id="result"><b></b></div>
        </center>
    </center>
</body>
if (X % 2 === 0){
} else {
}

замените X своим номером (может исходить из переменной). Оператор If выполняется, когда число четное, остальное, когда оно нечетное.

Если вы просто хотите знать, если какое-либо число нечетное:

if (X % 2 !== 0){
}

снова замените X на число или переменную.

каждое нечетное число при делении на два оставляет остаток как 1 и каждое четное число при делении на ноль оставляет ноль как остаток. Поэтому мы можем использовать этот код

  function checker(number)  {
   return number%2==0?even:odd;
   }

Как насчет этого...

    var num = 3 //instead get your value here
    var aa = ["Even", "Odd"];

    alert(aa[num % 2]);

вот что я сделал

//Array of numbers
var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10,32,23,643,67,5876,6345,34,3453];
//Array of even numbers
var evenNumbers = [];
//Array of odd numbers
var oddNumbers = [];

function classifyNumbers(arr){
  //go through the numbers one by one
  for(var i=0; i<=arr.length-1; i++){
     if (arr[i] % 2 == 0 ){
        //Push the number to the evenNumbers array
        evenNumbers.push(arr[i]);
     } else {
        //Push the number to the oddNumbers array
        oddNumbers.push(arr[i]);
     }
  }
}

classifyNumbers(numbers);

console.log('Even numbers: ' + evenNumbers);
console.log('Odd numbers: ' + oddNumbers);

по какой-то причине я должен был убедиться, что длина массива меньше на единицу. Когда я этого не делаю, я получаю "неопределенный" в последнем элементе массива oddNumbers.

когда вам нужно проверить, если какая-то переменная нечетна, вы должны сначала проверить если это число. Кроме того, обратите внимание, что при расчете остатка на отрицательное число, результат будет отрицательным (-3 % 2 === -1).

function isOdd(value) {
  return typeof value === "number" && // value should be a number
    isFinite(value) &&                // value should be finite
    Math.floor(value) === value &&    // value should be integer
    value % 2 !== 0;                  // value should not be even
}

Если Количество.isInteger доступен, вы также можете упростить этот код:

function isOdd(value) {
  return Number.isInteger(value)      // value should be integer
    value % 2 !== 0;                  // value should not be even
}

Примечание: здесь мы проверяем value % 2 !== 0 вместо value % 2 === 1 из-за -3 % 2 === -1. Если вы не хотите -1 пройти этот тест, возможно, потребуется изменить это линия.

вот несколько тестовых случаев:

isOdd();         // false
isOdd("string"); // false
isOdd(Infinity); // false
isOdd(NaN);      // false
isOdd(0);        // false
isOdd(1.1);      // false
isOdd("1");      // false
isOdd(1);        // true
isOdd(-1);       // true

предупреждение! Я проверил все остальные ответы, и они не верны.

только целое число может быть нечетным.

  • isOdd("someString") должно быть false.
    Строка не является целым числом.
  • isOdd(1.223) и isOdd(-1.223) должно быть false.
    Поплавок не является целым числом.
  • isOdd(0) должно быть false.
    Ноль-это четное целое число (https://en.wikipedia.org/wiki/Parity_of_zero).
  • isOdd(-1) должно быть истинный.
    Это-нечетное целое число.

Мое Решение:

function isOdd(n) {

  // Must be a number
  if (isNaN(n)) {
    return false;
  }

  // Number must not be a float
  if ((n % 1) !== 0) {
    return false;
  }

  // Integer must not be equal to zero
  if (n === 0) {
    return false;
  }

  // Integer must be odd
  if ((n % 2) !== 0) {
    return true;
  }

  return false;
}

JS Fiddle (при необходимости):https://jsfiddle.net/9dzdv593/8/

рассуждения, которые вошли в код

  • возвращаемый тип должен быть логическим. Ключевые слова true или false являются родными, поэтому нет необходимости возвращать строки, 0 или 1, которые имеют неоднозначные значения.
  • Javascript конвенция должна использовать верблюд-футляр isOdd
  • An if оператор должен иметь фигурные скобки {}. Отсутствие фигурных скобок может привести к проблемам с минимизацией, замедлению компиляции Javascript и неразборчивости кода, если возникает проблема форматирования.

используя % поможет вам сделать это...

вы можете создать несколько функций, чтобы сделать это за вас... Я предпочитаю функции separte, которые не привязаны к номеру в Javascript, как это, который также проверяет, передаете ли вы номер или нет:

нечетной функции:

var isOdd = function(num) {
  return 'number'!==typeof num ? 'NaN' : !!(num % 2);
};

функция:

var isEven = function(num) {
  return isOdd(num)==='NaN' ? isOdd(num) : !isOdd(num);
};

и назовем это так:

isOdd(5); // true
isOdd(6); // false
isOdd(12); // false
isOdd(18); // false
isEven(18); // true
isEven('18'); // 'NaN'
isEven('17'); // 'NaN'
isOdd(null); // 'NaN'
isEven('100'); // true

Я бы реализовал это, чтобы вернуть логическое значение:

function isOdd (n) {
    return !!(n % 2);
    // or ((n % 2) !== 0).
}

Он будет работать как на беззнаковых, так и на подписанных номерах. Когда модуль возврата -1 или 1 это будет переведено на true.

Не-модуль решение:

var is_finite = isFinite;
var is_nan = isNaN;

function isOdd (discriminant) {
    if (is_nan(discriminant) && !is_finite(discriminant)) {
        return false;
    }

    // Unsigned numbers
    if (discriminant >= 0) {
        while (discriminant >= 1) discriminant -= 2;

    // Signed numbers
    } else {
        if (discriminant === -1) return true;
        while (discriminant <= -1) discriminant += 2;
    }

    return !!discriminant;
}
        var sumSoFar = 0;
var oddnumber=0;
function Sum(data){
   for(var i=0;i<data.length;i++){
 if(data[i] % 2 == 1){
 console.log(data[i]);
 sumSoFar += data[i];
 }else{
 oddnumber+= data[i];
 }  }
   console.log(sumSoFar);
   console.log(oddnumber);
}
var sumOfNum=Sum([3,2,4,5,4,3,3,4,3,6,4]);

более функциональный подход в современном javascript:

const NUMBERS = "nul one two three four five six seven ocho nueve".split(" ")

const negate = f=> (...args)=> !f(...args)
const isOdd  = n=> NUMBERS[n % 10].indexOf("e")!=-1
const isEven = negate(isOdd)

вот простой рабочий пример:

function myFunction() {
    userInput = document.getElementById("myValue").value;

    if (userInput%2 == 0) {
      document.getElementById("demo").innerHTML= "even";
    } else {
     document.getElementById("demo").innerHTML = "odd";
    }
Input:<input id="myValue">

<button onclick="myFunction()">Try it</button>

используя тернарный оператор, вы можете найти нечетные четные числа:

var num = 2;
result = (num % 2 == 0) ? 'even' : 'odd'
console.log(result);

Comments

    Ничего не найдено.