2017-12-21 28 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"): 

に検索文字列を使用してオブジェクトのネストされた配列をフィルタリングします。

オブジェクトの構造を保持するオブジェクトのネストされた配列をフィルタリングしたい 上記の関数の出力は次のとおりです。ここでは、検索テキストに一致するオブジェクトを1つだけ取得するのではなく、リストのすべてのオブジェクトを取得しています

{ 
"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" 
      } 


     ] 
    }] 
} 

}であります

+0

はあなたを与えるloadsh.jsする方法を見つけるに使用することができてもよいです所望の結果。詳細はhttps://lodash.com/docs/4.17.4#find –

答えて

1

あなたは2つの配列を持っているので、あなたは、最初の1秒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();