在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();