2016-09-21 2 views
-1

jQuery 선택기를 인수로 사용하고 year 값을 함수에 전달하여 select (jQuery 선택기 인수)의 모든 값 배열에 대해 값을 테스트합니다. 옵션 값 중 하나라도 "value"인수와 같으면 항상 부울을 반환해야하지만 항상 정의되지 않은 값을 반환해야합니다.jQuery를 사용하여 부울 값을 비교하는 방법 map()

function checkOptions(selector, prop) {  
      var options = selector.children('option'); 
      var selectorValues = $.map(options, function(option) { 
       if(option.value == prop){ 
        return !!(option.value == prop); 
       }  
      }); 
     } 

제안 사항을 반영하도록 원래 코드를 변경 한 후에도 함수는 여전히 "정의되지 않음"을 반환합니다. 나는 그 소품하기 위해 "해"통과하고 있기 때문에 옵션의 값 중 하나입니다,

selectorValues = [false, false, true, false, false] 

이 말이 :

function checkOptions(selector, prop) { 
     var result; 
     var options = selector.children('option'); 
     var selectorValues = $.map(options, function(option) { 
       return option.value == prop; 
     }); 
    } 

변수 "selectorValues"

는 런타임에 이러한 값을 보유 선택의.

+1

아마도 'if'조건이 결코 통과되지 않을 것이므로 'return'에 도달하지 않을 것이므로'undefined '만 얻을 수 있습니다. 만약 당신이 단지 모든 불리언 값을 반환하고 싶다면'if'를 제거 할 수 있습니다. 체크가 이미 부울 인 – vlaz

+0

@vlaz를 리턴하므로'!!'를 제거 할 수 있습니다. 모든 반환 값이 정의되지 않은 경우 빈 배열을 반환하지 않아야합니까? – valarauko

+0

@valarauko 아니, 왜 그렇게 생각하니? '.map' 기능은 당연히 하나의 값에서 _mapping_을 다른 것으로 제공합니다. 따라서 N 값을 포함하는 배열은 매핑을 따르는 N 값을 포함하는 새로운 배열을 생성합니다. 즉'[1, 2, 3]'으로 시작하고 매핑이'x * 2 '이면 각 값에 대해 실행되고 새로운 배열은'[2, 4, 6]'이됩니다. 빈 배열을 만들 수는 없지만 항상 1 : 1입니다. 당신은 아마도'.filter'를 생각할 것입니다.이 필터는 술어를 사용하고 그것을 전달하는 모든 것을 돌려줍니다. – vlaz

답변

1

지도 기능이이 상황에서 제대로 사용되지 않아 문제가 발생했습니다. 역할은 배열의 각 요소에 변형을 적용하는 것입니다. some function을 확인하십시오. 그것은 당신이 원하는 것을 정확히 수행하는 미리 정의 된 자바 스크립트 함수입니다.

jquery 객체의 "배열"을 가져 와서 기본 자바 스크립트 배열로 바꾸고 원하는 조건을 검사하는 메소드를 호출합니다.

function checkOptions(selector, prop) { 
    var options = selector.find('option').toArray(); 
    var result = options.some(function(currentValue) { 
    return (currentValue.text == prop); //using type coercion 
    }); 
    return result; 
} 
관련 문제