[javascript] 값이 홀수인지 또는 짝수인지 테스트

매우 간단한 알고리즘으로 간단한 isEvenisOdd 함수 를 작성하기로 결정했습니다 .

function isEven(n) {
  n = Number(n);
  return n === 0 || !!(n && !(n%2));
}

function isOdd(n) {
  return isEven(Number(n) + 1);
}

n에 특정 매개 변수가 있으면 괜찮지 만 많은 시나리오에서 실패합니다. 그래서 가능한 많은 시나리오에 대해 올바른 결과를 제공하는 강력한 함수를 만들기 시작했습니다. 따라서 자바 스크립트 수 한도 내의 정수 만 테스트하고 다른 모든 것은 false (+ 및-무한대 포함)를 반환합니다. 0은 짝수입니다.

// Returns true if:
//
//    n is an integer that is evenly divisible by 2
//
// Zero (+/-0) is even
// Returns false if n is not an integer, not even or NaN
// Guard against empty string

(function (global) {

  function basicTests(n) {

    // Deal with empty string
    if (n === '')
      return false;

    // Convert n to Number (may set to NaN)
    n = Number(n);

    // Deal with NaN
    if (isNaN(n))
      return false;

    // Deal with infinity - 
    if (n === Number.NEGATIVE_INFINITY || n === Number.POSITIVE_INFINITY)
      return false;

    // Return n as a number
    return n;
  }

  function isEven(n) {

    // Do basic tests
    if (basicTests(n) === false)
      return false;

    // Convert to Number and proceed
    n = Number(n);

    // Return true/false
    return n === 0 || !!(n && !(n%2));
  }
  global.isEven = isEven;

  // Returns true if n is an integer and (n+1) is even
  // Returns false if n is not an integer or (n+1) is not even
  // Empty string evaluates to zero so returns false (zero is even)
  function isOdd(n) {

    // Do basic tests
    if (basicTests(n) === false)
      return false;

    // Return true/false
    return n === 0 || !!(n && (n%2));
  }
  global.isOdd = isOdd;

}(this));

누구든지 위의 문제를 볼 수 있습니까? 더 나은 버전이 있습니까?

다른 언어와 관련된 다양한 게시물이 있지만 ECMAScript에 대한 명확한 버전을 찾을 수 없습니다.



답변

계수 사용 :

function isEven(n) {
   return n % 2 == 0;
}

function isOdd(n) {
   return Math.abs(n % 2) == 1;
}

다음을 사용하여 Javascript의 값을 숫자로 강제 변환 할 수 있는지 확인할 수 있습니다.

Number.isFinite(parseFloat(n))

이 검사는 isEvenand isOdd함수 외부에서 수행하는 것이 바람직 하므로 두 함수에서 오류 처리를 복제 할 필요가 없습니다.


답변

비트 테스트를 선호합니다.

if(i & 1)
{
    // ODD
}
else
{
    // EVEN
}

홀수를 나타내는 첫 번째 비트가 켜져 있는지 테스트합니다.


답변

다음은 어떻습니까? 나는 이것을 IE에서만 테스트했지만 모든 길이의 숫자, 정수 또는 실수 인 실제 숫자를 나타내는 문자열을 처리하는 것이 매우 기뻤으며 부울, 정의되지 않은, null, 배열 또는 객체를 전달하면 두 함수 모두 false를 반환했습니다. (문자열이 전달 될 때 선행 또는 후행 공백을 무시할지 여부는 사용자에게 달려 있습니다. 무시 되지 않으며 두 함수가 모두 false를 반환 한다고 가정했습니다 .)

function isEven(n) {
   return /^-?\d*[02468]$/.test(n);
}

function isOdd(n) {
   return /^-?\d*[13579]$/.test(n);
}


답변

참고 : 음수도 있습니다.

function isOddInteger(n)
{
   return isInteger(n) && (n % 2 !== 0);
}

어디

function isInteger(n)
{
   return n === parseInt(n, 10);
}


답변

왜 이렇게하지 않습니까?

    function oddOrEven(num){
        if(num % 2 == 0)
            return "even";
        return "odd";
    }
    oddOrEven(num);


답변

Robert Brisita의 비트 테스트를 완료하려면.

if ( ~i & 1 ) {
    // Even
}


답변

var isEven = function(number) {
    // Your code goes here!
    if (number % 2 == 0){
       return(true);
    }
    else{
       return(false);
    }
};