在javascript中使用搜索字符串过滤嵌套的对象数组

在javascript中使用搜索字符串过滤嵌套的对象数组,javascript,jquery,arrays,json,lodash,Javascript,Jquery,Arrays,Json,Lodash,} 我使用上面的函数根据搜索字符串过滤数据 我想过滤对象的嵌套数组,使对象的结构保持不变 上面函数的输出如下所示,我将获取列表的所有对象,而不是仅获取一个与搜索文本匹配的对象 getFilteredResult(rDetails, searchText) { const regex = new RegExp(searchText, 'i'); let result= rDetails.filter(a =>

}

我使用上面的函数根据搜索字符串过滤数据

我想过滤对象的嵌套数组,使对象的结构保持不变 上面函数的输出如下所示,我将获取列表的所有对象,而不是仅获取一个与搜索文本匹配的对象

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


        ]
    }]
}

}

您有2个阵列,因此需要先筛选第一个阵列,然后再筛选第二个阵列:

const rDetailsList=[
{  
“日期”:“2018年4月1日”,
“rList”:[
{  
“aName”:“GOKQG C HQFUDHFPX”,
“成员”:“P3799838628”
},
{  
“aName”:“IGNDPJR D EKYJYC”,
“成员”:“P3899820579”
}
]
},
{  
“日期”:“2018年1月1日”,
“rList”:[
{  
“aName”:“,
“编号”:“A39A035073”
},
{  
“aName”:“YVTLW K SIGLC”,
“编号”:“A270M040558”
}
]
}
];
常量myFilter=(arr,num)=>{
常量rDetails=arr.filter(det=>!!det.rList.find(l=>l.aNumber==num));
返回rDetails.map(det=>{
det.rList=det.rList.filter(l=>l.aNumber==num);
返回数据;
});
};

日志(myFilter(rDetailsList,'A270M040558')可能是您可以使用loadsh.js的find方法来获得所需的结果。更多详情请访问,谢谢,但当我搜索时,它会提供过滤数据,当我清除搜索时,它会再次提供过滤数据,而不是原始数据。这与上面的代码无关。检查其他部分或提出其他问题
{
"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"
            }


        ]
    }]
}
 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();