Я пытаюсь написать в JavaScript функцию, которая фильтрует массив по выбранному свойству (значению).
Но это работает только для 2 уровня. Я не понимаю, чего мне не хватает.
Данные, которые я хочу отфильтровать: </p>
<pre><code> var data = [
{
name: "john_pc",
children: [
{
name: "sabrina_pc",
children: [
{
name: "sabrina_pc"
},
{
name: "john_pc"
}
]
},
{
name: "john_pc"
}
]
},
{
name: "sabrina_pc"
}
]
Функция childrenFilter:
const childrenFilter = (childrenData, filters) => {
let filteredData = childrenData.filter(item => {
for (var property in filters) {
var optionalValues = filters[property];
var value = item[property];
if (item.children) {
item.children = childrenFilter(item.children, filters);
}
let hasValue = value == optionalValues;
if (hasValue) {
return true;
}
return false;
}
return false;
}, this);
return filteredData;
}
Вызов функции:
Как вы можете видеть, 'childrenFilter' получает объект, ключ которого является свойством данных, а ключ является значением, которое я хочу сохранить.
let result = childrenFilter(data, {
"name": "a1"
});
console.log(JSON.stringify(result, null, 2))
Требуемый результат:
</p>
<pre><code> [
{
"name": "john_pc",
"children": [
{
"name": "sabrina_pc",
"children": [
{
"name": "john_pc"
}
]
},
{
"name": "john_pc"
}
]
}
]