Я хочу отфильтровать динамический массив по свойству "name".
Массив имеет 3 вида объектов: "ссылка", "папка" и "приложение".
{
type: "link",
name: ""
},
{
type: "folder",
name: "",
childs: []
},
{
type: "app",
name: "",
childs: []
}
- приложение может иметь только ссылки в качестве детей.
- папка может иметь все 3 вида (ссылка, папка, приложение) как дочерние.
Если ребенок соответствует поисковому значению, все его родители выживают,(его братья и сестры отфильтровываются, если они не совпадают)
У меня есть массив примерно так:
var items = [
{
type: 'app',
name: 'bar',
childs: [
{
type: 'link',
name: 'mee'
}
]
},
{
type: 'folder',
name: 'fizz',
childs: [
{
type: 'link',
name: 'buzz'
},
{
type: 'app',
name: 'boo',
childs: []
}
]
},
{
type: 'folder',
name: 'bla',
childs: [
{
type: 'app',
name: 'blee',
childs: [
{
type: 'link',
name: 'blee'
},
{
type: 'link',
name: 'bar'
}
]
},
{
type: 'folder',
name: 'mee',
childs: [
{
type: 'app',
name: 'bar',
childs: [
{
type: 'link',
name: 'maa'
}
]
},
{
type: 'link',
name: 'mee'
}
]
}
]
},
{
type: 'link',
name: 'foo',
childs: [
{
type: 'folder',
name: 'baf',
childs: []
}
]
}
];
Мне удалось написать non deep filtering:
https://jsfiddle.net/6ocd5u8y
(я также был бы признателен за любые предложения по этому коду)
Я также нашел код, который фильтрует глубоко, ноподдерживает братьев и сестер соответствующих потомков и фильтрует их по любой строке:
https://jsfiddle.net/ndfu8cpL
результат поиска типа 'bar' должен быть следующим:
filteredArray = [
{
type: 'app',
name: 'bar',
childs: []
},
{
type: 'folder',
name: 'bla',
childs: [
{
type: 'app',
name: 'blee',
childs: [
{
type: 'link',
name: 'bar'
}
]
},
{
type: 'folder',
name: 'mee',
childs: [
{
type: 'app',
name: 'bar',
childs: []
}
]
}
]
}
]
Буду очень признателен, если кто-нибудь сможет мне помочь.