2016-11-10 2 views
0

와일드 카드 필터링을 수행해야하는 개체 배열이 있습니다. 것JavaScript 필터 함수를 사용하는 동안 와일드 카드 사용

var filtered = a.filter(function(el) { 
     //normal checkbox criteria filter for selectedtype 
     if(!(self.serialno)){ 
     return el.type == self.selectedType 
     } 
     //wildcard text filtering from textfield 
     else{ 
     return typeof el.SN == self.serialno; 
     } 
    }); 

그리고 결과에서 인쇄 뭔가 같은 : 예를 들어, 내 객체가이 같은 것을 포함 할 수 : 일반 기준에 대한

var a = [ 
    { 
     "type":"metals", 
     "SN":"SN0000000000" 

    }, 
    { 
     "type":"wood", 
     "SN":"SN0000000001" 
    } 
]; 

내 필터링 기능이있을 법한

console.log(filtered); 

확인란 기준 선택을 사용하는 일반 기준 필터 ("유형")의 경우 선택한 기준 유형을 다시 개체 배열로 가져올 수 있습니다. 그러나 텍스트 기반 와일드 카드 검색을 호출하는 "SN"의 경우에는 그렇게 할 수 없습니다. 내 와일드 카드 텍스트 필드에 "00"키 입력한다면 예를 들어

이 함수는 반환 "SN/serialNo는"위의 예에서 "00"(포함하는 객체의 배열, 모두 가정 에있는 개체는입니다.

는 PS :

self.serialno는 텍스트 박스에서 검색 문자열이다.

el.SN은 필터 함수에서 반환 된 개체의 배열입니다.

업데이트 :

console.log(self.serialno.test(el.SN)); 

나 반환 :

이 코드를 실행 지금까지 내가 당신의 질문에서 이해

enter image description here

+0

'typeof el.SN'은''string ''문자열이 될'el.SN'의 타입을 반환합니다. 아마 당신이 원하는 것이 아니겠습니까? 관련 코드를 게시하지 않으면이 질문에 답할 수 없을 수도 있습니다. –

+1

'return self.serialno.test (el.SN);에서와 같이 regexp를 사용해보십시오. –

+0

@AndyRay 어떤 관련 코드가 필요합니까? 필요한 것은 와일드 카드를 사용하여 검색 한 객체 결과의 반환입니다. – Gene

답변

0

당신 el.SN은 문자열입니다 혈통을 대표하는 l은 정규 표현식을 따른다. 그렇다면 test 함수를 사용할 수 있습니다.이 함수는 매개 변수로 전달 된 정규 표현식에 대해 호출하는 문자열을 테스트하기위한 것입니다. 정규 표현식 el.SN

self.serialno 일치 당신은 el.SN는 자바 스크립트 필터 함수의 결과라고하면

var patt = new RegExp(self.serialno); 
    if(patt.test(el.SN)){ return el; } 

true를 반환합니다. 그러나 filtered 변수에는 그 함수의 결과가 들어 있다고 생각합니다.

el.SN은 오히려 배열 a을 필터링하는 데 사용되는 함수에 전달 된 매개 변수 (el)의 속성입니다.

+0

self.serialno는 텍스트 상자에서 추출한 문자열입니다. el.SN은 자바 스크립트 필터 함수의 결과입니다. 따라서 self.serialno.test를 사용할 수 없습니다. – Gene

+0

내 대답 – Sindico

+0

에서 업데이트를 확인하십시오 내 대답 업데이트를 확인하십시오. UR 시간을 너무 많이 주셔서 감사합니다. – Gene