@Comnox

Как отфильтровать массив объектов со вложенными массивами?

Столкнулся с такой проблемой, что не получается отфильтровать массив по введенному значению в строке поиска в watch-ере, не пойму, как учитывать, что массив savedProjects у объекта может быть пустой:

const journal = [{
  date: 15.11.2020,
  temperature: 5
  savedProjects: [{
    id: 1,
    name: 'first',
  },
  {
    id: 2,
    name: 'second',
  },
  {
    id: 3,
    name: 'third',
  }]
},
{
  date: 20.11.2020,
  temperature: 18
  savedProjects: [{
    id: 5,
    name: 'first',
  },
  {
    id: 6,
    name: 'second',
  }]
}, 
{
  date: 22.12.2021,
  temperature: 22,
  savedProjects: []
}]

watch: {
    searchString(value) {
      this.filteredProjects = journal.filter(
        (project) => {
          return project.savedProjects.length
            ? project.savedProjects.filter((item) => {
                return item.name.toLowerCase().includes(value.toLowerCase());
              })
            : "";
        }
      )
    }
  }
  • Вопрос задан
  • 214 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
отфильтровать массив по введенному значению в строке поиска в watch-ере

Для таких вещей принято использовать computed:

computed: {
  filteredProjects() {
    const search = this.searchString.toLowerCase();

    return this.journal.flatMap(n => {
      return n.savedProjects.filter(m => m.name.toLowerCase().includes(search));
    });
  },
  ...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы