2级过滤函数不返回值



我正在尝试进行 2 级(按嵌套数组的对象值过滤(过滤。 它不会生成更新的数组。 但它适用于单级过滤器。 有人帮我弄清楚我是否忘记了任何东西才能正确返回?

我的数据查看 -trying to filter the array by RegCategoryName

const array = [{
"ProgrammeId": 1,
"Programme": {
"ProgrammeId": 1,
"ProgrammeName": "DP Programme",
"ShortCode": "DP01",
"StartDate": "2019-07-22T09:55:51.947Z",
"EndDate": "2021-07-22T09:55:51.947Z"
},
"List": [{
"ProgrammeId": 1,
"QualificationId": 102,
"RegistrationCategoryId": 202,
"Qualification": {
"QualificationId": 102,
"QualificationName": "Diploma Y",
"QualificaionActiveStatus": "Active"
},
"RegistrationCategory": [
],
"viewMore": false
},
{
"ProgrammeId": 1,
"QualificationId": 103,
"RegistrationCategoryId": 203,
"Qualification": {
"QualificationId": 103,
"QualificationName": "Qualification X",
"QualificaionActiveStatus": "Active"
},
"RegistrationCategory": [{
"RegistrationCategoryId": 203,
"RegCategoryName": "Course"
}],
"viewMore": false
},
{
"ProgrammeId": 1,
"QualificationId": 101,
"RegistrationCategoryId": 201,
"Qualification": {
"QualificationId": 101,
"QualificationName": "Advanced Bilingual Diploma",
"QualificaionActiveStatus": "Inactive"
},
"RegistrationCategory": [{
"RegistrationCategoryId": 201,
"RegCategoryName": "Anticipated"
},
{
"RegistrationCategoryId": 202,
"RegCategoryName": "Diploma"
},
{
"RegistrationCategoryId": 203,
"RegCategoryName": "Retake"
},
{
"RegistrationCategoryId": 203,
"RegCategoryName": "CP"
},
{
"RegistrationCategoryId": 203,
"RegCategoryName": "RC A"
},
{
"RegistrationCategoryId": 204,
"RegCategoryName": "RC B"
},
{
"RegistrationCategoryId": 204,
"RegCategoryName": "RC C"
},
{
"RegistrationCategoryId": 204,
"RegCategoryName": "RC D"
},
{
"RegistrationCategoryId": 204,
"RegCategoryName": "RC E"
}
],
"viewMore": false
},
{
"ProgrammeId": 1,
"QualificationId": 103,
"RegistrationCategoryId": 203,
"Qualification": {
"QualificationId": 103,
"QualificationName": "Diploma",
"QualificaionActiveStatus": "Inactive"
},
"RegistrationCategory": [{
"RegistrationCategoryId": 203,
"RegCategoryName": "Anticipated"
}],
"viewMore": false
}
]
},
{
"ProgrammeId": 2,
"Programme": {
"ProgrammeId": 2,
"ProgrammeName": "CP Programme",
"ShortCode": "CP02",
"StartDate": "2013-07-22T09:55:51.947Z",
"EndDate": "2024-07-22T09:55:51.947Z"
},
"List": [{
"ProgrammeId": 2,
"QualificationId": 104,
"RegistrationCategoryId": 204,
"Qualification": {
"QualificationId": 104,
"QualificationName": "Qualification A",
"QualificaionActiveStatus": "Active"
},
"RegistrationCategory": [{
"RegistrationCategoryId": 204,
"RegCategoryName": "Certificate"
}],
"viewMore": false
},
{
"ProgrammeId": 2,
"QualificationId": 105,
"RegistrationCategoryId": 205,
"Qualification": {
"QualificationId": 105,
"QualificationName": "Qualification 2",
"QualificaionActiveStatus": "Active"
},
"RegistrationCategory": [{
"RegistrationCategoryId": 205,
"RegCategoryName": "Anticipated"
}],
"viewMore": false
},
{
"ProgrammeId": 2,
"QualificationId": 104,
"RegistrationCategoryId": 204,
"Qualification": {
"QualificationId": 104,
"QualificationName": "Qualification 1",
"QualificaionActiveStatus": "Inactive"
},
"RegistrationCategory": [{
"RegistrationCategoryId": 204,
"RegCategoryName": "Anticipated"
}],
"viewMore": false
}
]
},
{
"ProgrammeId": 3,
"Programme": {
"ProgrammeId": 3,
"ProgrammeName": "MYP Programme",
"ShortCode": "MYP03",
"StartDate": "2019-07-22T09:55:51.947Z",
"EndDate": "2028-07-22T09:55:51.947Z"
},
"List": [{
"ProgrammeId": 3,
"QualificationId": 101,
"RegistrationCategoryId": 201,
"Qualification": {
"QualificationId": 101,
"QualificationName": "Advanced Bilingual Diploma",
"QualificaionActiveStatus": "Active"
},
"RegistrationCategory": [{
"RegistrationCategoryId": 201,
"RegCategoryName": "Anticipated"
},
{
"RegistrationCategoryId": 202,
"RegCategoryName": "Diploma"
},
{
"RegistrationCategoryId": 203,
"RegCategoryName": "Retake"
},
{
"RegistrationCategoryId": 203,
"RegCategoryName": "CP"
},
{
"RegistrationCategoryId": 203,
"RegCategoryName": "RC A"
},
{
"RegistrationCategoryId": 204,
"RegCategoryName": "RC B"
},
{
"RegistrationCategoryId": 204,
"RegCategoryName": "RC C"
},
{
"RegistrationCategoryId": 204,
"RegCategoryName": "RC D"
},
{
"RegistrationCategoryId": 204,
"RegCategoryName": "RC E"
}
],
"viewMore": false
},
{
"ProgrammeId": 3,
"QualificationId": 105,
"RegistrationCategoryId": 205,
"Qualification": {
"QualificationId": 105,
"QualificationName": "Qualification 2",
"QualificaionActiveStatus": "Inactive"
},
"RegistrationCategory": [{
"RegistrationCategoryId": 205,
"RegCategoryName": "Anticipated"
}],
"viewMore": false
}
]
},
{
"ProgrammeId": 4,
"Programme": {
"ProgrammeId": 4,
"ProgrammeName": "ABC Programme",
"ShortCode": "ABC04",
"StartDate": "2014-07-22T09:55:51.947Z",
"EndDate": "2026-07-22T09:55:51.947Z"
},
"List": [{
"ProgrammeId": 4,
"QualificationId": 105,
"RegistrationCategoryId": 205,
"Qualification": {
"QualificationId": 105,
"QualificationName": "Qualification X",
"QualificaionActiveStatus": "Active"
},
"RegistrationCategory": [{
"RegistrationCategoryId": 205,
"RegCategoryName": "Diploma"
}],
"viewMore": false
},
{
"ProgrammeId": 4,
"QualificationId": 105,
"RegistrationCategoryId": 205,
"Qualification": {
"QualificationId": 105,
"QualificationName": "Qualification 2",
"QualificaionActiveStatus": "Inactive"
},
"RegistrationCategory": [{
"RegistrationCategoryId": 205,
"RegCategoryName": "Anticipated"
}],
"viewMore": false
}
]
}
]
// working code of 1 level:
nestedFilter = (targetArray, filters) =>
targetArray.filter(o => Object.keys(filters).every(k =>
String(o[k][this.childName]).toLowerCase().includes(String(filters[k]).toLowerCase())));
console.log("working 1st level", nestedFilter(array,"RegCategoryName"))
// not working code :
nestedFilter = (targetArray, filters) =>
targetArray.filter(item => {
return item.List.filter(ar => Object.keys(filters).every(k =>
ar[k].filter(o => {
console.log(filters[k])
return String(o[this.childName]).toLowerCase().includes(String(filters[k]).toLowerCase());
})
));
});
console.log("not working", nestedFilter(array,"RegCategoryName"))

您正在将字符串作为过滤器参数传递给函数。然后Object.keys(filters)将返回该字符串中的字符索引数组["0", "1", "2", "3", "4", "5", "6",...]这显然不是您想要的。

试试这个:

const array = [ { "ProgrammeId": 1, "Programme": { "ProgrammeId": 1, "ProgrammeName": "DP Programme", "ShortCode": "DP01", "StartDate": "2019-07-22T09:55:51.947Z", "EndDate": "2021-07-22T09:55:51.947Z" }, "List": [ { "ProgrammeId": 1, "QualificationId": 102, "RegistrationCategoryId": 202, "Qualification": { "QualificationId": 102, "QualificationName": "Diploma Y", "QualificaionActiveStatus": "Active" }, "RegistrationCategory": [ ], "viewMore": false }, { "ProgrammeId": 1, "QualificationId": 103, "RegistrationCategoryId": 203, "Qualification": { "QualificationId": 103, "QualificationName": "Qualification X", "QualificaionActiveStatus": "Active" }, "RegistrationCategory": [ { "RegistrationCategoryId": 203, "RegCategoryName": "Course" } ], "viewMore": false }, { "ProgrammeId": 1, "QualificationId": 101, "RegistrationCategoryId": 201, "Qualification": { "QualificationId": 101, "QualificationName": "Advanced Bilingual Diploma", "QualificaionActiveStatus": "Inactive" }, "RegistrationCategory": [ { "RegistrationCategoryId": 201, "RegCategoryName": "Anticipated" }, { "RegistrationCategoryId": 202, "RegCategoryName": "Diploma" }, { "RegistrationCategoryId": 203, "RegCategoryName": "Retake" }, { "RegistrationCategoryId": 203, "RegCategoryName": "CP" }, { "RegistrationCategoryId": 203, "RegCategoryName": "RC A" }, { "RegistrationCategoryId": 204, "RegCategoryName": "RC B" }, { "RegistrationCategoryId": 204, "RegCategoryName": "RC C" }, { "RegistrationCategoryId": 204, "RegCategoryName": "RC D" }, { "RegistrationCategoryId": 204, "RegCategoryName": "RC E" } ], "viewMore": false }, { "ProgrammeId": 1, "QualificationId": 103, "RegistrationCategoryId": 203, "Qualification": { "QualificationId": 103, "QualificationName": "Diploma", "QualificaionActiveStatus": "Inactive" }, "RegistrationCategory": [ { "RegistrationCategoryId": 203, "RegCategoryName": "Anticipated" } ], "viewMore": false } ] }, { "ProgrammeId": 2, "Programme": { "ProgrammeId": 2, "ProgrammeName": "CP Programme", "ShortCode": "CP02", "StartDate": "2013-07-22T09:55:51.947Z", "EndDate": "2024-07-22T09:55:51.947Z" }, "List": [ { "ProgrammeId": 2, "QualificationId": 104, "RegistrationCategoryId": 204, "Qualification": { "QualificationId": 104, "QualificationName": "Qualification A", "QualificaionActiveStatus": "Active" }, "RegistrationCategory": [ { "RegistrationCategoryId": 204, "RegCategoryName": "Certificate" } ], "viewMore": false }, { "ProgrammeId": 2, "QualificationId": 105, "RegistrationCategoryId": 205, "Qualification": { "QualificationId": 105, "QualificationName": "Qualification 2", "QualificaionActiveStatus": "Active" }, "RegistrationCategory": [ { "RegistrationCategoryId": 205, "RegCategoryName": "Anticipated" } ], "viewMore": false }, { "ProgrammeId": 2, "QualificationId": 104, "RegistrationCategoryId": 204, "Qualification": { "QualificationId": 104, "QualificationName": "Qualification 1", "QualificaionActiveStatus": "Inactive" }, "RegistrationCategory": [ { "RegistrationCategoryId": 204, "RegCategoryName": "Anticipated" } ], "viewMore": false } ] }, { "ProgrammeId": 3, "Programme": { "ProgrammeId": 3, "ProgrammeName": "MYP Programme", "ShortCode": "MYP03", "StartDate": "2019-07-22T09:55:51.947Z", "EndDate": "2028-07-22T09:55:51.947Z" }, "List": [ { "ProgrammeId": 3, "QualificationId": 101, "RegistrationCategoryId": 201, "Qualification": { "QualificationId": 101, "QualificationName": "Advanced Bilingual Diploma", "QualificaionActiveStatus": "Active" }, "RegistrationCategory": [ { "RegistrationCategoryId": 201, "RegCategoryName": "Anticipated" }, { "RegistrationCategoryId": 202, "RegCategoryName": "Diploma" }, { "RegistrationCategoryId": 203, "RegCategoryName": "Retake" }, { "RegistrationCategoryId": 203, "RegCategoryName": "CP" }, { "RegistrationCategoryId": 203, "RegCategoryName": "RC A" }, { "RegistrationCategoryId": 204, "RegCategoryName": "RC B" }, { "RegistrationCategoryId": 204, "RegCategoryName": "RC C" }, { "RegistrationCategoryId": 204, "RegCategoryName": "RC D" }, { "RegistrationCategoryId": 204, "RegCategoryName": "RC E" } ], "viewMore": false }, { "ProgrammeId": 3, "QualificationId": 105, "RegistrationCategoryId": 205, "Qualification": { "QualificationId": 105, "QualificationName": "Qualification 2", "QualificaionActiveStatus": "Inactive" }, "RegistrationCategory": [ { "RegistrationCategoryId": 205, "RegCategoryName": "Anticipated" } ], "viewMore": false } ] }, { "ProgrammeId": 4, "Programme": { "ProgrammeId": 4, "ProgrammeName": "ABC Programme", "ShortCode": "ABC04", "StartDate": "2014-07-22T09:55:51.947Z", "EndDate": "2026-07-22T09:55:51.947Z" }, "List": [ { "ProgrammeId": 4, "QualificationId": 105, "RegistrationCategoryId": 205, "Qualification": { "QualificationId": 105, "QualificationName": "Qualification X", "QualificaionActiveStatus": "Active" }, "RegistrationCategory": [ { "RegistrationCategoryId": 205, "RegCategoryName": "Diploma" } ], "viewMore": false }, { "ProgrammeId": 4, "QualificationId": 105, "RegistrationCategoryId": 205, "Qualification": { "QualificationId": 105, "QualificationName": "Qualification 2", "QualificaionActiveStatus": "Inactive" }, "RegistrationCategory": [ { "RegistrationCategoryId": 205, "RegCategoryName": "Anticipated" } ], "viewMore": false } ] } ];
function filterByProperty(property, searchValue) {
return array.filter(obj => obj.List.filter(item =>
item.RegistrationCategory.filter(value => value[property] === searchValue)));
}
console.log(filterByProperty("RegistrationCategoryName", "Diploma"));

最新更新