JavaScript에서 숫자가 홀수인지 확인하는 방법


245

누구든지 JavaScript의 숫자가 짝수인지 홀수인지 확인하는 코드를 알려 줄 수 있습니까?



1
@DavidThomas 나는 부분적으로 동의하지만, 저는 두 가지주의 사항이있다 : 내가 선택해야한다면 1, 나는 오히려 초급 프로그래머가에 대해 알고 것 %보다는 운영자 &및 2 동안은 &, 빠른 이론적으로 는 정말 중요하지 않습니다 .
kojiro

3
@kojiro : 학습자에게 더 많은 (유효한) 옵션을 제시하고 싶습니다. 플러스 전에는 이런 식으로 비트 단위 &를 사용한다고 생각하지 않았으므로 흥미로운 작업입니다. 이 때문에 어쨌든, 이다 속는 사람, 나는 기존의 질문 합병을 받았습니다했습니다. 바라건대 여기에 대한 답변 (적어도 특정 답변)이 손실되지 않기를 바랍니다.
데이비드 모니카가

1
@kojiro 나는 계산 시간의 대부분이 함수 호출에 의해 취해지기 때문에 당신의 바이올린은 매우 쓸모가 없다고 두려워합니다. 그러나 아무도 함수 호출을 사용하여 숫자가 홀수인지 또는 짝수인지를 결정하지는 않습니다. 테스트를 세 번째로 수정했지만 지금은 전화를
받고

답변:


347

아래 코드를 사용하십시오 :

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은 짝수를 나타냅니다.


97
이 반환됩니다 참고 0하거나 1(또는 NaN당신은 그것을 숫자가 아닌 하나의 강요 할 수없는 뭔가를 공급하는 경우) 대부분의 상황에서 잘 작동합니다. 하지만 진짜 원하는 경우 truefalse:return (num % 2) == 1;
TJ 크라우

3
NaN에 대한 좋은 메모. 그러나 일반적으로, 당신은 자바 스크립트가 진실하거나 거짓되기를 원하기 때문에 내가 한 방식으로 그것을 작성했습니다.
Chii

9
명확히하기 위해 모듈로 연산자 (%)는 나머지 부분을 제공합니다. 따라서 3 % 2는 3/2가되고 나머지는 1로 남게되므로 3 % 2는 1을 반환합니다.
Abuh

6
TJ가 말한 것 외에도 num정수가 아닌 경우 분수를 반환합니다 . isOdd(1.5)==true(소수 값이 같지 않기 때문에) 비교해도 여전히 작동 true하지만, 함수가 반환 true되거나 false"isOdd"라는 이름으로 암시 되면 더 좋습니다 .
nnnnnn

6
당신은 또한 return !!(num % 2)부울을 얻을 수 있습니다
Duncan

115

비트 AND연산자를 사용하십시오 .

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

function checkNumber(argNumber) {
  document.getElementById("result").innerHTML = "Number " + argNumber + " is " + oddOrEven(argNumber);
}
 
checkNumber(17);
<div id="result" style="font-size:150%;text-shadow: 1px 1px 2px #CE5937;" ></div>

문자열 반환 값을 원하지 않고 부울 값을 원하면 다음을 사용하십시오.

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

5
+1, 당신은 대답은 확실히 내 것을 이길 수 있습니다, 당신이 사용 하지 않는 유일한 대답은 말할 것도 없습니다X % Y !
s0d4pop

4
내 테스트가 정확한지 확실하지 않지만 비트 단위 AND는 고정 수의 경우 모듈로 연산자보다 40 배 느리고 난수의 경우 2 배 느립니다 : jsperf.com/odd-or-even
Blender

8
이 값은 숫자가 아닌 숫자 (예 : 3.14)에 대해 "홀수"또는 "짝수"를 반환합니다.
nnnnnn

2
또는 : function isEven(n){return !(n & 1);}.
RobG

7
@Gnuey 모든 숫자는 일련의 비트로 구성됩니다. 모든 홀수의 최하위 비트는 1로 설정되고 모든 짝수는 0 x & 1으로 설정됩니다. 마지막 비트가 숫자로 설정되어 있는지 확인합니다 (1은 최하위 비트를 제외한 모든 비트가 1로 설정된 숫자이므로) ) :이 경우 입니다 , 수는 그렇지 않은 경우에도, 홀수이다.
0x499602D2

31

다음과 같이 할 수 있습니다.

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

9
부울이 무엇인지 아는 것 같지 않습니다. if (condition) { answer=true; } else { answer=false; }의 불필요하게 간결한 버전입니다 answer = (bool) condition;. 귀하의 기능을 축소하면 function isEven(value) { return (bool) (value%2 == 0); }모두 행복해질 것입니다.
awm

9
나는 무언가 다르게 프로그래밍하기 때문에 nar 할 필요가 없습니다.
TNC

5
@awm - 것 같다 당신이 자바 스크립트를 알지 못한다. 부울로 캐스팅 할 수 없으며 (bool)(오류가 발생합니다) 어쨌든 필요하지 않습니다 : 연산자가 부울을 반환 return value%2 == 0;하므로 작업을 수행합니다 ==.
nnnnnn

2
와우, 내가 진짜로 썼어? 그렇습니다. 와 같아야합니다 answer = !!(condition). 물론 내가하려고 한 요점 return value%2==0은 조건부로 귀찮게 할 필요가 없다는 것입니다.
awm

나는 그것을 우아하게 생각한다 : value%2===0
carlodurso


13

짝수가 많은 배열을 정말로 크게 만들어야합니까?

모듈러스 (%)를 사용하십시오. 나누는 두 숫자의 나머지를 제공합니다.

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은 짝수임을 의미합니다. 다른 것이 있으면 이상하다는 것을 의미합니다.


8

이것은 작은 코드 스 니펫으로 해결할 수 있습니다.

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

도움이 되었기를 바랍니다 :)


6

많은 언어와 마찬가지로 Javascript에는 나머지 연산자% 를 찾는 모듈러스 연산자 가 있습니다. 2로 나눈 후 나머지가 없으면 숫자는 짝수입니다.

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

이것은 정수를 테스트하기위한 매우 일반적인 관용구입니다.


3
그러나 음수 값의 경우 계수가 까다 롭거나 정의되지 않을 수 있습니다. 적절한 언어 사양을 참조하십시오.

6

비트 단위의 코드 골프는 다음과 같습니다.

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

5

전달할 수있는 간단한 기능입니다. 모듈로 연산자를 사용합니다 %.

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

is_even(3)
false
is_even(6)
true

1
삼항 연산자의 결과가 'true'또는 'false'인 경우 실제로 삼항 연산자가 필요하지 않습니다. 여기, 당신은 할 수 /해야합니다 :return !(x % 2);
dom_watson

4

내 확장명을 사용하십시오 :

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

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

그때

var a=5; 
 a.isEven();

== 거짓

 a.isOdd();

== 참

숫자인지 확실하지 않은 경우 다음 분기로 테스트하십시오.

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

업데이트 :

변수를 사용하지 않을 경우 :

(5).isOdd()

성능 :

절차 적 패러다임이 OOP 패러다임보다 낫다는 것이 밝혀졌습니다. 그건 그렇고, 나는 이 FIDDLE에서 프로파일 링을 수행 했습니다 . 그러나 OOP 방식은 여전히 ​​가장 예쁘다.

여기에 이미지 설명을 입력하십시오


고마워 친구,이 논리에 대해 누군가가 이런 종류의 논리를 물었을 때 대답 할 수 없었습니다. 이제 감사합니다 ..하지만이 방법을 따르면 성능에 어떤 이점이 있습니까? 우리는 isEven (x); 등
Shoib 모하메드

@ShoibMohammedA : 비교가 완료되었습니다! jsfiddle.net/abdennour/jL2uyksa/3
Abdennour TOUMI

-1은 기본 프로토 타입 기능을 확장하지 않습니다. ( stackoverflow.com/questions/14034180/… )
tfmontague

3

-1 또는 0에 도달 할 때까지 재귀 적으로 2를 뺍니다 (양의 정수에 대해서만 작동합니다 :)


음수를 사용하면 대신 2로 증가
Hydroper

그리고> 53 ^ 2 시간 N = 2 ^ 52이고, n위한 무한한 양의 대체 소요
rioV8

3

for 문과 조건을 사용하여 숫자 또는 일련의 숫자가 홀수인지 확인할 수 있습니다.

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

1과 5 사이의 모든 홀수를 인쇄합니다.


3

Adobe Dreamweaver에서이 파일을 실행하면 완벽하게 작동합니다. 나는 if (isNaN (mynmb))

주어진 Value가 숫자인지 아닌지 확인하고 Math.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>

3
   <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>

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

X를 숫자로 바꾸십시오 (변수에서 나올 수 있음). If 문은 숫자가 짝수 일 때 실행되고 Else는 홀수 일 때 실행됩니다.

주어진 숫자가 홀수인지 알고 싶다면 :

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

다시 X를 숫자 또는 변수로 바꿉니다.


2

두 개의 홀수로 나눈 모든 홀수는 1로 남고 0으로 나눈 경우의 모든 짝수는 나머지를 0으로 남습니다. 따라서이 코드를 사용할 수 있습니다

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

2

이건 어때요...

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

    alert(aa[num % 2]);

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);

어떤 이유로 나는 배열의 길이가 1만큼 짧아야합니다. 그렇게하지 않으면 oddNumbers 배열의 마지막 요소에 "정의되지 않음"이 표시됩니다.


2
조건이 배열의 길이와 같거나 "<="로 설정되어 있기 때문입니다. 등호를 제거하고 원하는 결과를 얻었습니다.
Zakher Masri

2

일부 변수가 홀수인지 테스트해야 할 경우 먼저 integer인지 테스트 해야합니다 . 또한 음수의 나머지를 계산할 때 결과는 음수 ( -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
}

Number.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

2

사용 % 하면이 작업을 수행하는 데 도움이됩니다.

당신을 위해 몇 가지 함수를 만들 수 있습니다 ... 나는 자바 스크립트에서 Number에 첨부되지 않은 separte 함수를 선호합니다.

홀수 기능 :

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

2

깨끗하기 때문에 ES6의 하나의 라이너.

const isEven = (num) => num % 2 == 0;


2

많은 사람들이 홀수의 의미를 오해합니다

  • isOdd("str") 거짓이어야한다.
    정수만 홀수 일 수 있습니다.
  • isOdd(1.223)그리고 isOdd(-1.223)거짓이어야합니다.
    float는 정수가 아닙니다.
  • isOdd(0)거짓이어야한다.
    0은 정수입니다 ( 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/

1 라이너

자바 스크립트 1- 라이너 솔루션. 가독성에 관심이없는 사람들을 위해.

const isOdd = n => !(isNaN(n) && ((n % 1) !== 0) && (n === 0)) && ((n % 2) !== 0) ? true : false;

아직 솔루션을 가속화 할 수 있습니다. 즉, 마지막 문장에서 !! (n % 2)을 반환하면 선택적으로 부호있는 숫자로 작동하게됩니다 (즉, n % 2가 0을 반환하면 false이지만 -1 또는 1이 반환되면 이것은 반환 true). 모듈러스 리턴이 0인지 확인하기 때문에 솔루션은 실제로 홀수에 대해 false를 반환하지만 1을 확인해야하며 1은 음수에 대해 실패하므로 반환 !! (n % 2)이 더 안전합니다. 어쨌든 {} (블록 문)은 축소 문제를 일으키지 않으며 토론에 없습니다.
Hydroper

@TheProHands-메모 주셔서 감사합니다. (1) 문제는 Modulus Version에 오타가 있다는 것입니다. (n % 2) !== 0대신에 이어야했다 (n % 2) === 0. (2) 내 조언을 방지하는 것입니다 !!(n % 2)(a)는이보다 느린 성능을 가지고 있기 때문에, (n % 2) !== 0( jsperf.com/notnot-vs-strict-not ), (B)가 해킹 - 그것은 falsey 값을 강제 변환 0false, 및 (c) 모호합니다 (고성능 프로그래밍 언어는 성능을 위해 파스칼처럼 읽지 않아야합니다-그것이 컴파일러의 일입니다). (3) 예, {}블록 설명이 없으면 몇 가지 문제가 발생합니다 (내 답변에서 업데이트 됨).
tfmontague 2013

가독성에 관심이 있기 때문에 블록 문을 피하지 않지만 블록 문을 찾는 것이 문제가되지 않고 코드 유지 관리에만 문제가된다고 말하려고합니다. 즉, 블록 문 대신 식 문과 병합 된 시퀀스 식을 사용하면 코드를 읽을 수없고 추악하게 만들 수 있습니다. 즉 if (0) call1(), assign = 0, call2(), 단일 문은 나쁘지 않습니다. if (0) return; if (0) ;; if (0); break; if (0) continue;, 어쨌든 브레이크 라인 블록 문을 계속 사용하는 것이 좋습니다 . 긴 인라인 조건.
Hydroper

당신 같은 타입 / 널 (null) 검사가 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검사, 그것은 다른 검사를 수행하지 않고 조기에 함수 종료 할 수 있습니다 (하지 방어를위한) 성능을위한 것입니다.
tfmontague

1

부울을 반환하도록 이것을 구현했습니다.

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;
}

1

현대 자바 스크립트에서보다 기능적인 접근 방식 :

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)

1

ES6에서 :

const isOdd = num => num % 2 == 1;


3
26 개의 기존 답변이있는 8 살짜리 질문에 대한 답변을 추가 할 때 실제로 답변의 새로운 측면을 설명하고 시간과 새로운 버전이 답변에 영향을 미치는지 설명하는 것이 유용합니다. 코드 만 응답하면 설명이 추가되고이 경우 사용법을 보여주는 예제 호출이 추가되어 거의 항상 개선 될 수 있습니다.
Jason Aller

1
제목은 'JavaScript에서 숫자가 홀수인지 확인하는 방법'이며 질문에 대한 ES6 솔루션이 게시되지 않았습니다.
Darryl Mendonez


0

이것은 배열에서 작동합니다.

function evenOrOdd(numbers) {
  const evenNumbers = [];
  const oddNumbers = [];
  numbers.forEach(number => {
    if (number % 2 === 0) {
      evenNumbers.push(number);
    } else {
      oddNumbers.push(number);
    }
  });

  console.log("Even: " + evenNumbers + "\nOdd: " + oddNumbers);
}

evenOrOdd([1, 4, 9, 21, 41, 92]);

로그 아웃해야합니다. 4,92 1,9,21,41

숫자 만 :

function evenOrOdd(number) {
  if (number % 2 === 0) {
    return "even";
  }

  return "odd";
}

console.log(evenOrOdd(4));

이것은 콘솔에도 출력되어야합니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.