lazy_den
@lazy_den
Студент, Yii разработчик

Как сделать фильтрацию древовидных массивов?

Всем привет, имеется следующий объект.
{
id: 1,
name: "Москва",
children: [
    {
        id:2,
        name: 'Академический'
        children: [
                {
                        id:3,
                        name: 'ул. Янгеля'
                }
               ....
        ]
    }
....
]
}

Т.е имеется 3 уровня вложенности, одного и того же родителя.
Мне нужно как-то сделать поиск по символам, т.е. совпадение может быть ив название района, и в названии улицы. И нужно оставлять всю ветку, если найдено в улице совпадение. Т.е. Город -> район -> улица
  • Вопрос задан
  • 71 просмотр
Пригласить эксперта
Ответы на вопрос 1
0xD34F
@0xD34F Куратор тега JavaScript
Функция фильтрации получает массив и строку поиска, рекурсивно вызывается для дочерних элементов каждого из элементов переданного массива. Возвращает элементы, чей name содержит строку поиска или у кого после рекурсивного вызова остались дочерние элементы.

const filter = (arr, str) => (arr || [])
  .map(n => ({ ...n, children: filter(n.children, str) }))
  .filter(n => n.name.includes(str) || n.children.length);

https://jsfiddle.net/pL2fh506/
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
08 мар. 2021, в 11:59
15000 руб./за проект
08 мар. 2021, в 11:19
15000 руб./за проект
08 мар. 2021, в 11:15
15000 руб./за проект