如何通过.filter()访问.filter()?javascript

zvms9eto  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(412)

我正在尝试动态比较 searchTag 针对数组的字段 student.tags ,对于每个自己都生活在另一个数组中的学生,称为 students 下面是这样的

  1. students = [
  2. 0: {
  3. name: "Cheddar",
  4. ...,
  5. tags: ["gravy","steak"]
  6. },
  7. ...,
  8. 40: {
  9. name: "Stacy",
  10. ...,
  11. tags: ["gravy","grade"]
  12. },
  13. ]

我在过滤器中的过滤器失败了,并且很难返回在标签数组中有该标签的学生
我能行

  1. students.filter((student) => {
  2. if ((student.tags.includes(searchTag))) {
  3. return student;
  4. } return '';
  5. })

但这只会在精确匹配时返回,我需要动态查找学生,即键入'gra'同时返回学生0和40,而'grad'只返回40

des4xlb0

des4xlb01#

您可以使用过滤器和一些过滤器的组合来过滤阵列

  1. const students = [
  2. {
  3. name: "Cheddar",
  4. tags: ["gravy", "steak"],
  5. },
  6. {
  7. name: "Stacy",
  8. tags: ["gravy", "grade"],
  9. },
  10. ];
  11. let search = "gra";
  12. const result = students.filter(({ tags }) => tags.some((tag) => tag.toLowerCase().includes(search.toLowerCase())));
  13. console.log(result);

相关问题