简体   繁体   English

如何通过 .filter() .filter()? JavaScript

[英]How can I .filter() through a .filter()? JavaScript

I'm trying to dynamically compare a searchTag field against an array student.tags , for every student which themselves all live in another array called students我正在尝试将searchTag字段与数组student.tags动态比较,对于每个学生都居住在另一个名为students数组中

So something like below所以像下面这样

students = [
  0: {
    name: "Cheddar",
    ...,
    tags: ["gravy","steak"]
  },

  ...,

  40: {
    name: "Stacy",
    ...,
    tags: ["gravy","grade"]
  },

]

I'm failing bad with a filter inside a filter, and struggling returning the students who have that tag in their tag array我在过滤器中使用过滤器失败了,并且努力返回标签数组中具有该标签的学生

I can do我可以

students.filter((student) => {
            if ((student.tags.includes(searchTag))) {
              return student;
            } return '';
          })

but this returns only on exact match and I need to find students dynamically, ie typing 'gra' returns both student 0 and 40, but 'grad' returns only 40但这仅在完全匹配时返回,我需要动态查找学生,即输入“gra”返回学生 0 和 40,但“grad”仅返回 40

You can use a combination of filter and some to filter the array您可以使用filtersome的组合来过滤数组

 const students = [ { name: "Cheddar", tags: ["gravy", "steak"], }, { name: "Stacy", tags: ["gravy", "grade"], }, ]; let search = "gra"; const result = students.filter(({ tags }) => tags.some((tag) => tag.toLowerCase().includes(search.toLowerCase()))); console.log(result);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM