Как я могу .фильтровать() через .фильтр()? язык JavaScript

#javascript #filter

Вопрос:

Я пытаюсь динамически сравнить searchTag поле с массивом student.tags для каждого учащегося , который сам живет в другом массиве, называемом students

Так что что-то вроде ниже

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

  ...,

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

]
 

Я плохо справляюсь с фильтром внутри фильтра и изо всех сил пытаюсь вернуть студентов, у которых есть этот тег в их массиве тегов

Я могу это сделать

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

но это возвращается только при точном совпадении, и мне нужно динамически находить студентов, т. Е. Ввод » gra «возвращает как студента 0, так и 40, но «выпускник» возвращает только 40

Комментарии:

1. кстати, ваш код может быть return student.tags.includes(searchTag) , так как он возвращает true или false, что в любом случае вы должны возвращать при обратном вызове фильтра

2. каков ожидаемый результат ?

3. ожидаемый результат-это новый массив отфильтрованных учащихся, у которых есть теги, динамически соответствующие входным данным поиска. затем я просматриваю их и делаю карточки. возможно, я использовал неправильное слово «динамически», но единственное, что я нашел, возвращает их, если тег точно совпадает

Ответ №1:

Вы можете использовать комбинацию фильтра и некоторых других для фильтрации массива

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

Комментарии:

1. спасибо за помощь, о которой я не знал .some() это мое рабочее решение « .filter((студент) => { if (студент.теги.некоторые((тег) =>> тег.нижний регистр().включает(поиск по тегу.нижний регистр ()))) { вернуть ученика; } вернуть «; }) «