2017-12-21 33 views
1
{ 
"rResponse":{ 
    "rDetailsList":[ 
     { 
      "rDate":"April 01, 2018", 
      "rList":[ 
       { 
        "aName":"GOKQG C HQFUDHFPX", 
        "aNumber":"P3799838628" 
       }, 
       { 
        "aName":"IGNDPJR D EKYJYC", 
        "aNumber":"P3899820579" 
       } 
      ] 
     }, 
     { 
      "rDate":"Jan 01, 2018", 
      "rList":[ 
       { 
        "aName":"", 
        "aNumber":"A39A4035073" 
       }, 
       { 
        "aName":"YVTLW K SIGLC", 
        "aNumber":"A270M040558" 
       } 
      ] 
     } 
    ] 
} 

} I 검색 문자열에 기초하여 데이터를 필터링하기위한 상기 함수를 사용하고스크립트

getFilteredResult(rDetails, searchText) { 
       const regex = new RegExp(searchText, 'i'); 
       let result= rDetails.filter(a => 
        a.rList.some(rItem=> 
        (rItem.aName.search(regex) > -1) || 
          (rItem.aNumber.search(regex) > -1) 
        )) 
       console.log(result,"filteredResults") 
       return result; 
      } 

let result=getFilteredResult(rResponse.rDetailsList, "A270M040558"): 

검색 문자열을 사용하여 오브젝트의 중첩 배열 필터링.

개체의 구조체를 유지하면서 개체의 중첩 된 배열을 필터링하려는 경우 위의 함수의 출력은 다음과 같습니다. 여기서 검색 텍스트와 일치하는 개체를 하나만 가져 오는 대신 목록의 모든 개체를 가져옵니다.

{ 
"rResponse": { 
    "rDetailsList": [{ 
     "rDate": "Jan 01, 2018", 
     "rList": [{ 
       "aName": "", 
       "aNumber": "A39A4035073" 
      }, 
      { 
       "aName": "YVTLW K SIGLC", 
       "aNumber": "A270M040558" 
      } 


     ] 
    }] 
} 

은}

예상 출력

{ 
"rResponse": { 
    "rDetailsList": [{ 
     "rDate": "Jan 01, 2018", 
     "rList": [ 
      { 
       "aName": "YVTLW K SIGLC", 
       "aNumber": "A270M040558" 
      } 


     ] 
    }] 
} 

}

입니다 16,
+0

당신이 당신을 줄 loadsh.js의 방법을 찾을 사용 할 수 있음을 원하는 결과. 자세한 내용은 https://lodash.com/docs/4.17.4#find –

답변

1

당신은이 개 배열을 가지고, 그래서 당신은 다음 첫 번째 두 번째 필터링해야합니다

const rDetailsList = [ 
 
     { 
 
      "rDate":"April 01, 2018", 
 
      "rList":[ 
 
       { 
 
        "aName":"GOKQG C HQFUDHFPX", 
 
        "aNumber":"P3799838628" 
 
       }, 
 
       { 
 
        "aName":"IGNDPJR D EKYJYC", 
 
        "aNumber":"P3899820579" 
 
       } 
 
      ] 
 
     }, 
 
     { 
 
      "rDate":"Jan 01, 2018", 
 
      "rList":[ 
 
       { 
 
        "aName":"", 
 
        "aNumber":"A39A4035073" 
 
       }, 
 
       { 
 
        "aName":"YVTLW K SIGLC", 
 
        "aNumber":"A270M040558" 
 
       } 
 
      ] 
 
     } 
 
    ]; 
 

 
const myFilter = (arr, num) => { 
 
    const rDetails = arr.filter(det => !!det.rList.find(l => l.aNumber === num)); 
 
    
 
    return rDetails.map(det => { 
 
    det.rList = det.rList.filter(l => l.aNumber === num); 
 
    return det; 
 
    }); 
 
}; 
 

 
console.log(myFilter(rDetailsList, 'A270M040558'));

+0

을 방문하십시오. 감사하지만, 검색 할 때 필터링 된 데이터가 제공되고 검색을 지울 때 원본 데이터 대신 필터링 된 데이터가 다시 제공됩니다. – user8599269

+1

위의 코드와 관련이 없습니다. 다른 부분을 확인하거나 다른 질문을하십시오. – klugjo

0
const res = _.chain(rDetailsList) 
    .map(rDetail => _.assign(// iterate array and set filtered rList 
     {}, // use new object to avoid mutations 
     rDetail, 
     { rList: _.filter(rDetail.rList, { aNumber: 'A270M040558' }) } 
    )) 
    .reject(rDetail => _.isEmpty(rDetail.rList)) // remove elements with empty rList 
    .value();