Фильтр данных JSON
Я использую PrimeNG TreeTable для отображения данных иерархии из файла JSON. Я хочу отфильтровать эти данные перед привязкой к treetable.
Ниже приведен пример данных JSON.
{
"data":
[
{
"data":{
"name":"Documents",
"size":"75kb",
"type":"Folder"
},
"children":[
{
"data":{
"name":"Work",
"size":"55kb",
"type":"Folder"
},
"children":[
{
"data":{
"name":"Expenses.doc",
"size":"30kb",
"type":"Document"
}
},
{
"data":{
"name":"Resume.doc",
"size":"25kb",
"type":"Resume"
}
}
]
},
{
"data":{
"name":"Home",
"size":"20kb",
"type":"Folder"
},
"children":[
{
"data":{
"name":"Invoices",
"size":"20kb",
"type":"Text"
}
}
]
}
]
},
{
"data":{
"name":"Pictures",
"size":"150kb",
"type":"Folder"
},
"children":[
{
"data":{
"name":"barcelona.jpg",
"size":"90kb",
"type":"Picture"
}
},
{
"data":{
"name":"primeui.png",
"size":"30kb",
"type":"Picture"
}
},
{
"data":{
"name":"optimus.jpg",
"size":"30kb",
"type":"Picture"
}
}
]
}
]
}
Я хочу привязать только узел "Домой" к древовидной таблице.
Я попробовал ниже ссылки, но не получил результат.
Фильтровать данные json в узле js Фильтровать данные в файле JSON
1 ответ
Вы можете использовать фильтр. Например вот так:
var yourData = {
"data": [
//...
]
};
var res = [];
Array.prototype.push.apply(res, yourData.data.filter(function (el) {
return el.data.name === "Home";
});
Array.prototype.push.apply(res, yourData.data.children.filter(function (el) {
return el.data.name === "Home";
});
Вам просто нужно адаптировать условия к вашим потребностям (в зависимости от того, насколько глубоким может быть ваш атрибут "Дом"). Если вы скажете, что четыре шага глубже, вы, вероятно, могли бы лучше деформировать отдельные инструкции фильтра в цикле через свойства, такие как ["data", "data.children", ...]
с соответствующей функцией доступа.