JSFiddle - React, Tailwind, and code Playground
by Jens Kühn
TypeScript
function filterTree(data: any[] = [], filterText: string, prop: string): any[] {
if (data === []) {
return [];
}
const result: any[] = [];
data.forEach(d => {
if (d.hasOwnProperty(prop)) {
if (d[prop].includes(filterText)) {
result.push(d);
} else if (typeof d.items === 'object') {
const childResults = filterTree(d.items, filterText, prop);
if (childResults.length > 0) {
result.push({...d, items: childResults});
}
}
}
});
return result;
}
const t = [{
"name": "kpis",
"items": [{
"name": "Budget Per Campaign",
"items": [{
"name": "Budget Per Campaign",
"identifier": "[Measures].[Budget Per Campaign Trend]"
}, {
"name": "Budget Per Campaign",
"identifier": "[Measures].[Budget Per Campaign Status]"
}, {
"name": "Budget Per Campaign",
"identifier": ""
}, {
"name": "Budget Per Campaign",
"identifier": "[Measures].[Budget Per Campaign Value]"
}]
}]
},
{
"name": "measures",
"items": [{
"name": "Bridge_Date",
"items": [{
"name": "Campaign ID",
"identifier": "[Measures].[Campaign ID]"
}]
},
{
"name": "Budget Per Campaign",
"items": [{
"name": "Budget Per Campaign",
"identifier": "[Measures].[Budget Per Campaign Trend]"
}, {
"name": "Budget Per Campaign",
"identifier": "[Measures].[Budget Per Campaign Status]"
}, {
"name": "Budget Per Campaign",
"identifier": ""
}, {
"name": "Budget Per Campaign",
"identifier": "[Measures].[Budget Per Campaign Value]"
}]
},
{
"name": "Delivery",
"items": [{
"name": "Internal",
"items": [{
"name": "CTR_Impressions",
"identifier": "[Measures].[CTR_Impressions]"
}, {
...