2013-06-16 7 views
5

입력 요소 집합을 캡슐화하는 jQuery 객체 obj이 있습니다. 나는 각 요소의 값에서 배열을 만들기 위해이 코드를 사용하고

:

$.map(obj, function(elem, i){ 
    return $(elem).val(); 
}); 

문제는 때때로 입력 필드의 일부가 유효하지 않은 값을 포함하고 내가 그들을 건너 뛰고 싶은 것입니다 배열을 만드는 과정. return false을 단순하게 수행하면 요소를 건너 뛰지 않고 대신 false을 배열에 삽입합니다.

없이 명시 적으로 수행하는 방법이 있는지 알고 싶습니다. .each을 명시 적으로 사용하고 있습니다.

답변

11

jQuery 컬렉션이므로 .map을 직접 실행 한 다음 .get을 사용하여 배열이됩니다.

var values = obj.map(function(){ 
    return this.value ? this.value : null; 
}).get(); 

참고 : 위의 검사는 false가 아닌 값을 반환합니다.

test case on jsFiddle을 참조하십시오.

+1

우리는 또한 이렇게 할 수 있습니다.'var myArray = [ 'one', 'two', 'three']; var i = myArray.filter (function (n) { return n });''get'을 사용했는지 알 수 있습니까? – wuhcwdc

+0

@PankajGarg 배열을 가지고 있다면, 확실히. 이 경우 OP에는 jQuery 컬렉션이 있으며 유효한 값을 가진 배열이 필요합니다. '.get'과 함께'.map'을 사용하면 먼저 jQuery 컬렉션을 매핑 한 다음 배열로 변환합니다. jQuery의'.filter'와'.map'은 네이티브'Array' 객체의 비슷한 메소드와 다르게 작동합니다. – mekwall

4

나는 트릭을 한 아무것도 반환하지 말았어야했는데 왜 이것이 내 머리를 일찍 지나치지 않았는지 모르겠다. 난 그냥 여기 길이를 테스트하고 동일에 남아 위해 유효성 검사 코드를 생략

$.map(obj, function(elem, i){ 
    if($(elem).val().length == 0) return; 

    return $(elem).val(); 
}); 

편집 :

경우

당신이 여기에 동일한 작업을 수행 할 수정 프로그램입니다 subject

+0

이것은 틀린 것 같습니다. ** 잘못된 값 **과 공백/null 사이에는 차이가 있습니까? – wuhcwdc

+0

'return;은'undefined'를 얻을 것을 제안합니다. 즉, 'undefined'를 반환하지 않고 결과가 정의되지 않은 것입니다. 이로 인해 요소가 배열에 삽입되지 않습니다. 그러나, 나는 연구 (또는 다른 의견)없이 이것을 입증 할 수 없다. 정의되지 않은 모질라 상태는 _returned_입니다. 최선을 다해서 이것을 추구하지 않는 것 - 나는이 토론이 여러 번 전에 일어났다 고 생각한다.) –

+0

@PankajGarg 나는 단지 주제에 머무르기 위해 목적에 대한 전체 유효성 확인 코드를 생략했다 ... –