@akkv

Как сделать живой поиск по массиву и вложенным массивам?

Есть массив областей и городов.
[
  { name: 'Страна' },
  {
    name: 'Область',
    cities: [{ name: 'Город' }, { name: 'Город' }],
  },
  {
    name: 'Область',
    cities: [{ name: 'Город' }, { name: 'Город' }],
  }
];

Подскажите как реализовать живой поиск одновременно по стране\области\городу, с созданием нового массива результатов.

При поиске строки "о" результатом будет:
Область
Город
Город
Область
и т.д.

Как вариант решения преобразовать все в один массив без вложенности.

Пример без вложенности (работает только для поиска по областям):
search.oninput = () => {
  if (search.value !== '') {
    filteredData = data.filter((t) => t.name.toLowerCase().includes(search.value.toLowerCase())
  }
};
  • Вопрос задан
  • 429 просмотров
Пригласить эксперта
Ответы на вопрос 2
Alexander3928
@Alexander3928
В youtube набери "live search"
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега JavaScript
{PHP, MySql, HTML, JS, CSS} developer
filteredData = data.((t) => t.name.toLowerCase().includes(search.value.toLowerCase())
Во первых не хватает скобки закрывающей, странно что у вас вообще что-то работает.
во вторых - любая работа с массивом (а если уже совсем придираться, то у вас не массив, а объект, но не суть) - цикл, даже если он замаскирован под мап/фильтер, а любой вложенный массив - рекурсия. Соответственно пишете рекурсивную функцию.
В третьих - вам вроде нужен массив строк(?), а фильтр вернет массив элементов, что вообще не рядом. По этому скорее всего вам нужен не filter, а просто цикл с возвратом строки.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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