Programing

자바 스크립트 : 케이스 전환에서 조건 사용

lottogame 2020. 11. 19. 07:48
반응형

자바 스크립트 : 케이스 전환에서 조건 사용


멍청한 질문에 대해 죄송합니다. javascript switch-case 언어 요소에서 케이스에 대한 조건을 어떻게 사용할 수 있습니까? 아래 예에서와 같이 변수 liCount가 <= 5 및> 0 일 때 케이스가 일치해야합니다 . 그러나 내 코드가 작동하지 않습니다.

switch (liCount) {
    case 0:
        setLayoutState('start');
        var api = $('#UploadList').data('jsp');
        api.reinitialise();
        break;
    case (liCount<=5 && liCount>0):
        setLayoutState('upload1Row');
        var api = $('#UploadList').data('jsp');
        api.reinitialise();
        break;
    case (liCount<=10 && liCount>5):
        setLayoutState('upload2Rows');
        var api = $('#UploadList').data('jsp');
        api.reinitialise();
        break;
    case (liCount>10):
        var api = $('#UploadList').data('jsp');
        api.reinitialise();
        break;                  
}

조언을 해주셔서 감사합니다!


이것은 작동합니다 :

switch (true) {
    case liCount == 0:
        setLayoutState('start');
        var api = $('#UploadList').data('jsp');
        api.reinitialise();
        break;
    case liCount<=5 && liCount>0:
        setLayoutState('upload1Row');
        var api = $('#UploadList').data('jsp');
        api.reinitialise();
        break;
    case liCount<=10 && liCount>5:
        setLayoutState('upload2Rows');
        var api = $('#UploadList').data('jsp');
        api.reinitialise();
        break;
    case liCount>10:
        var api = $('#UploadList').data('jsp');
        api.reinitialise();
        break;                  
}

이 답변의 이전 버전은 괄호를 범인으로 간주했습니다. 사실 여기서 괄호는 관련이 없습니다. 필요한 것은 switch(true){...}케이스 표현식이 부울로 평가되는 것뿐입니다 .

그것은 우리가 스위치에 제공하는 값이 비교 기준으로 사용되기 때문에 작동합니다. 결과적으로 부울로 평가되는 케이스 표현식은 실행되는 케이스를 판별합니다. 또한 이것을 switch(false){..}뒤집어 통과 하고 원하는 표현이 참 대신 거짓으로 평가되도록 할 수 있습니다 . 그러나 개인적으로 진실로 평가되는 조건을 다루는 것을 선호합니다. 그러나 그것은 또한 작동하므로 그것이 무엇을하고 있는지 이해하는 것을 명심할 가치가 있습니다.

예 : liCount가 3이면 첫 번째 비교는입니다 true === (liCount == 0). 이는 첫 번째 경우가 거짓임을 의미합니다. 그런 다음 스위치는 다음 케이스로 이동합니다 true === (liCount<=5 && liCount>0). 이 표현식은 true로 평가되어이 케이스가 실행되고 break. 더 명확하게하기 위해 여기에 괄호를 추가했지만 표현의 복잡성에 따라 선택 사항입니다.

긴 일련의 조건을 처리하는 매우 간단하고 깔끔한 방법 (사용자가 수행하려는 작업에 적합한 경우)입니다. 일련의 긴 조건 ìf() ... else if() ... else if () ...은 많은 시각적 소음이나 취약성을 유발할 수 있습니다.

유효한 코드 임에도 불구하고 비표준 패턴이므로주의해서 사용하십시오.


당신은 한 가지 방법은 그 overcomplicated. 대신 다음과 같이 if 문으로 작성하십시오.

if(liCount == 0)
    setLayoutState('start');
else if(liCount<=5)
    setLayoutState('upload1Row');
else if(liCount<=10)
    setLayoutState('upload2Rows');

$('#UploadList').data('jsp').reinitialise();

또는 ChaosPandion 이 최대한 최적화를 시도하는 경우 :

setLayoutState(liCount == 0 ? 'start' :
               liCount <= 5 ? 'upload1Row' :
               liCount <= 10 ? 'upload2Rows' :
               null);

$('#UploadList').data('jsp').reinitialise();

if 문을 사용하려고합니다.

if (liCount === 0) {
    setLayoutState('start');
} else if (liCount <= 5) {
    setLayoutState('upload1Row');
} else if (liCount <= 10) {
    setLayoutState('upload2Rows');
}
$('#UploadList').data('jsp').reinitialise();  

아래 dmp의 답변을 참조하십시오 . 가능한 경우이 답변을 삭제했지만 수락되었으므로 이것이 차선책입니다 :)

You can't. JS Interpreters require you to compare against the switch statement (e.g. there is no "case when" statement). If you really want to do this, you can just make if(){ .. } else if(){ .. } blocks.


switch (true) {
  case condition0:
    ...
    break;
  case condition1:
    ...
    break;
}

will work in JavaScript as long as your conditions return proper boolean values, but it doesn't have many advantages over else if statements.


If that's what you want to do, it would be better to use if statements. For example:

if(liCount == 0){
    setLayoutState('start');
}
if(liCount<=5 && liCount>0){
    setLayoutState('upload1Row');
}
if(liCount<=10 && liCount>5){
    setLayoutState('upload2Rows');
}             
var api = $('#UploadList').data('jsp');
    api.reinitialise();

That's a case where you should use if clauses.


Your code does not work because it is not doing what you are expecting it to do. Switch blocks take in a value, and compare each case to the given value, looking for equality. Your comparison value is an integer, but most of your case expressions resolve to a boolean value.

So, for example, say liCount = 2. Your first case will not match, because 2 != 0. Your second case, (liCount<=5 && liCount>0) evaluates to true, but 2 != true, so this case will not match either.

For this reason, as many others have said, you should use a series of if...then...else if blocks to do this.


if the possible values are integers you can bunch up cases. Otherwise, use ifs.

var api, tem;

switch(liCount){
    case 0:
    tem= 'start';
    break;
    case 1: case 2: case 3: case 4: case 5:
    tem= 'upload1Row';
    break;
    case 6: case 7: case 8: case 9: case 10:
    tem= 'upload2Rows';
    break;
    default:
    break;
}
if(tem) setLayoutState((tem);
api= $('#UploadList').data('jsp');
api.reinitialise();

참고URL : https://stackoverflow.com/questions/5464362/javascript-using-a-condition-in-switch-case

반응형