숫자가 두 값 사이에 있는지 확인하는 방법은 무엇입니까?


144

JavaScript에서는 창 크기가 500px보다 큰 경우 브라우저에 무언가를 지시합니다. 나는 그렇게한다 :

if (windowsize > 500) {
    // do this
}

이것은 훌륭하게 작동하지만이 동일한 방법을 적용하고 싶지만 범위가 다릅니다. 따라서 창 크기가 500px에서 600px 사이이면 브라우저에 작업을 수행하고 싶습니다. 나는 이것이 효과가 없다는 것을 알고 있지만 여기에 내가 상상 한 방법이 있습니다.

if (windowsize > 500-600) {
    // do this
}

JavaScript 내에서도 가능합니까?


9
이 질문을 끝내기에는 약간 가혹한 것 같습니다. 투표를 다시 열 수 있습니까? 잘 작성되었으며 샘플 코드를 제공합니다.
Caltor

더 정확한 검사는 if (windowsize> = 500 && windowsize <= 600) 또는 if (! (windowsize <500 || windowsize> 600))
SPlatten

답변:


225

값 이나 그 자체가 조건을 만족 시키지 않을 것이라는 의미 windowsize보다 크 500거나 작은 지 테스트합니다 .600500600

if (windowsize > 500 && windowsize < 600) {
  // ...
}

1
고맙습니다 undefined, 창 크기가 500px보다 크고 600px보다 작을 때 브라우저에서 원하는 작업을 수행한다는 것을 확인하기 위해 본질적으로 500-600px 범위 내에서만 작동합니까? (나는이 물건 lol 너무 좋지 않다)
Dyck

1
@Dyck 예, 그렇게합니다 :), jQuery는 JavaScript 라이브러리 일뿐입니다.
undefined

7
이 조건은 windowsize501px 이상 599px 이하인 경우에만 해당됩니다 . 500px 및 600px는 제외됩니다. 이 값을 포함하려면 비교에 동등성을 추가하십시오.
Robert Koritnik

3
자세한 내용은 다음과 같지만 다음과 같이 읽을 수 있습니다.if(500 < windowsize && windowsize < 600)
Giovanni Benussi

119

나는 잠시 시간을 보냈으므로 이미 답변을 수락했지만 다음을 기여할 것이라고 생각했습니다.

Number.prototype.between = function(a, b) {
  var min = Math.min.apply(Math, [a, b]),
    max = Math.max.apply(Math, [a, b]);
  return this > min && this < max;
};

var windowSize = 550;

console.log(windowSize.between(500, 600));

JS 피들 데모 .

또는 숫자를 확인하는 옵션 이 종료점을 포함하여 정의 된 범위 내에 있는지 확인하려면 다음을 수행하십시오 .

Number.prototype.between = function(a, b, inclusive) {
  var min = Math.min.apply(Math, [a, b]),
    max = Math.max.apply(Math, [a, b]);
  return inclusive ? this >= min && this <= max : this > min && this < max;
};

var windowSize = 500;

console.log(windowSize.between(500, 603, true));

JS 피들 데모 .

의견에 명시된 바와 같이 위의 내용에 대해 약간의 수정 사항을 추가하도록 수정되었습니다.

Function.prototype.apply()느리다! 고정 된 양의 인수가있을 때 호출하는 것 외에도 의미가 없습니다…

의 사용을 제거 할 가치가 있었으며 Function.prototype.apply(), 이는 먼저 '포함'옵션없이 위의 메소드의 수정 된 버전을 생성합니다.

Number.prototype.between = function(a, b) {
  var min = Math.min(a, b),
    max = Math.max(a, b);

  return this > min && this < max;
};

var windowSize = 550;

console.log(windowSize.between(500, 600));

JS 피들 데모 .

그리고 '포괄적'옵션으로 :

Number.prototype.between = function(a, b, inclusive) {
  var min = Math.min(a, b),
    max = Math.max(a, b);

  return inclusive ? this >= min && this <= max : this > min && this < max;
}

var windowSize = 500;

console.log(windowSize.between(500, 603, true));

JS 피들 데모 .

참고 문헌 :


6
왜 직접 호출하는 대신 적용을 사용 Main.min(a,b)합니까? Function.prototype.apply가 느립니다! 고정 된 양의 인수가있을 때 호출하는 것 외에도 의미가 없습니다.
Steel Brain

나는 이것을 기본 툴박스에 추가 할 것입니다-매우 편리하고 기여해 주셔서 감사합니다!
SidOfc 2016 년

@SteelBrain : 당신은 포인트가 있습니다! 나는 초기에을 사용 하는 이유Function.prototype.apply()있다고 생각하지만 그 내용이 무엇인지 또는 생각하지 않았는지 반영하기 위해 답변을 업데이트 했습니다.
데이비드는 모니카

6
Number객체를 수정하지 않는 함수를 만드는 것이 훨씬 좋습니다 . 이것은 안티 패턴이며 ECMA 표준이 Number.between()함수 를 포함하도록 변경 되거나 다른 라이브러리 또는 다른 코드 Number.prototype.between가 다른 정의로 ​​다른 곳을 정의 하는 경우에 와서 물릴 것 입니다. 대신 도우미 기능을 만들어 사용하십시오!
Monarch Wadia

2
@MonarchWadia 당신의 요점은 네이티브 객체를 수정 / 연장하는 것은 나쁜 습관이라는 것이 합리적이지만, 나는 이것이 어디에나 설교를하는 것이 약간 중복된다고 생각합니다 (오해 없음). "기본 개체를 수정하지 마십시오"라는 횟수를 계산할 수 없습니다. 나에게 이것은 해를 입히면 판매자의 책임과 같이 칼을 팔 때마다 칼의 위험에 대해 구매자에게 경고하는 가정용 칼을 파는 사람과 같습니다. 위험은 상식이어야합니다. 무시 여부는 사용자에게 달려 있습니다.
akinuri

80

코드가 내 변수의 유효성을 검사하고 범위 값 사이에 있다는 추가 힌트를주기 위해 변수를 내부에 배치하는 것을 선호합니다

if (500 < size && size < 600) { doStuff(); }

13
나는이 스타일을 좋아한다!
Kaii

2
이 파이썬의 가까이이기 때문에 이것은 내 취향이다 min < testval < max구문
daveruinseverything

@GouravChawla이 답변의 코드 스 니펫 예제에 대해 이야기하고 있습니까? 내 코드 스 니펫은 파이썬으로, 비교에 사용되었습니다
daveruinseverything

@GouravChawla 아무도 달리 말했다. 당신이 동의하지 않는 것이 확실하지 않습니다.
daveruinseverything

28

그것은 오래된 질문이지만 나와 같은 누군가에게 유용 할 수 있습니다.

lodash보유 _.inRange()기능 https://lodash.com/docs/4.17.4#inRange

예:

_.inRange(3, 2, 4);
// => true

이 방법은 Lodash유틸리티 라이브러리를 사용하며 설치된 버전의 Lodash에 액세스해야합니다.


2
최종 값은 포함되어 있지 않습니다. 예. _.inRange(10, 0, 10) // => false
Lucio

OP가 질문 범위를으로 제한 했으므로이 Javascript방법은 Lodash유틸리티 라이브러리를 사용하며 설치된 버전의 Lodash에 액세스해야합니다.
Chaya Cooper

2

if쓰지 않고 여러 절을 조건으로 사용할 수 있습니다

if (windowsize > 500-600) {
    // do this
}

이것은 논리적으로 의미가 없기 때문에 JavaScript는 다음과 같은 if 조건을 읽습니다.

windowSize > -100 

그것은 계산 500-600하기 때문에-100

&&예를 들어 다음과 같이 두 경우를 모두 엄격하게 검사 해야합니다.

if( windowSize > 500 && windowSize < 600 ){

// Then doo something

}

0

부트 스트랩 모달 값을 표시하고 숨기기 위해이 jQuery 비트를 구현했습니다. 사용자 텍스트 상자 항목의 값 범위에 따라 다른 필드가 표시됩니다.

$(document).ready(function () {
    jQuery.noConflict();
    var Ammount = document.getElementById('Ammount');

    $("#addtocart").click(function () {

            if ($(Ammount).val() >= 250 && $(Ammount).val() <= 499) {
                {
                    $('#myModal').modal();
                    $("#myModalLabelbronze").show();
                    $("#myModalLabelsilver").hide();
                    $("#myModalLabelgold").hide();
                    $("#myModalPbronze").show();
                    $("#myModalPSilver").hide();
                    $("#myModalPGold").hide();
                }
            }
    });

6
사소한 기능을 위해 jQuery를 사용하는 것은 2013 년 옵션 이었지만 오늘날은 아닙니다.
mgamsjager

3
사실이지만 사람들이 오늘도 그것을 사용 할까 걱정됩니다
mgamsjager

1
호기심에서 : 왜 jQuery가 그 때보 다 사소한 기능에 더 나쁜가요?
Julix

2
@Julix는 대부분 성능이 뛰어나지 만이 경우에는 무시해도 좋습니다. 일반적인 요점은 "필요하지 않은 경우 jQuery를 사용하지 말라"는 것이지만 이러한 의견은 토론을 시작 (다시 시작) 할 장소가 아닙니다. 그래도 재미있게 보내십시오
Luca

이것은 단지 솔루션의 구현입니다. OP는 이미 값에 액세스 할 수 있습니다. 따라서 jQuery $().val()는 관련이 없으며 필요하지 않습니다. 그러나 질문의 ​​원래 버전에서 OP는 간단한 산술 검사를 위해 jQuery를 언급합니다. (한숨) 그것은 첫 번째 실수입니다.
akinuri

0

가능한 가장 짧은 방법은 다음과 같습니다.

if (Math.abs(v-550)<50) console.log('short')
if ((v-500)*(v-600)<0) console.log('short')

매개 변수화 :

if (Math.abs(v-max+v-min)<max+min) console.log('short')
if ((v-min)*(v-max)<0) console.log('short')

첫 번째가 어떻게 작동하는지 이해하지 못하면 양쪽을 2로 나눌 수 있습니다.)

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