2 уровень функции фильтра не возвращает значение - PullRequest
0 голосов
/ 21 сентября 2019

Я пытаюсь выполнить фильтрацию по 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"))

1 Ответ

1 голос
/ 23 сентября 2019

Вы передаете строку в качестве аргумента фильтра функции.Тогда 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"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...