#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 (студент.теги.некоторые((тег) =>> тег.нижний регистр().включает(поиск по тегу.нижний регистр ()))) { вернуть ученика; } вернуть «; }) «