I am looking to fix my current function which searches all possible matches and gives a whole nested array but it works for one level.
I am trying to use a filter and searching all properties through the loop.
Somehow it is not working for all scenarios.
data = [
{
id: "m1",
name: "data1",
val: "D",
items: [
{
id: "d1",
name: "datanested1",
val: "D",
items: [
{
id: "1",
name: "direct Data",
val: "E"
},
{
id: "2",
name: "test",
val: "E"
}
]
}
]
},
{
id: "d2",
name: "data2",
val: "D",
items: [
{
id: "21",
name: "test21",
val: "E"
},
{
id: "22",
name: "test23",
val: "E"
}
]
},
{
id: "d3",
name: "data23",
val: "D",
items: [
{
id: "31",
name: "test data 3",
val: "E"
},
{
id: "32",
name: "test data 4",
val: "E"
}
]
}
];
function getFilteredData(searchText) {
return data.filter(item => {
return Object.keys(item).some(key => {
return String(item[key])
.toLowerCase()
.includes(searchText.toLowerCase());
});
});
}
console.log("data search level1", getFilteredData("data"));
//expected output
// [
// {
// id: "m1",
// name: "data1",
// val: "D",
// items: [
// {
// id: "d1",
// name: "datanested1",
// val: "D",
// items: [
// {
// id: "1",
// name: "direct Data",
// val: "E"
// },
// {
// id: "2",
// name: "B Data",
// val: "E"
// }
// ]
// }
// ]
// },
// {
// id: "d2",
// name: "data2",
// val: "D",
// items: [
// {
// id: "21",
// name: "test21",
// val: "E"
// },
// {
// id: "22",
// name: "test23",
// val: "E"
// }
// ]
// },
// {
// id: "d3",
// name: "data23",
// val: "D",
// items: [
// {
// id: "31",
// name: "test data 3",
// val: "E"
// },
// {
// id: "32",
// name: "test data 4",
// val: "E"
// }
// ]
// }
// ];
console.log("data search level2", getFilteredData("datanested1"));
//expected output
// {
// id: "m1",
// name: "data1",
// val: "D",
// items: [
// {
// id: "d1",
// name: "datanested1",
// val: "D",
// items: [
// {
// id: "1",
// name: "direct Data",
// val: "E"
// },
// {
// id: "2",
// name: "B Data",
// val: "E"
// }
// ]
// }
// ]
// }
console.log("data search level3", getFilteredData("direct"));
//expected output
// {
// id: "m1",
// name: "data1",
// val: "D",
// items: [
// {
// id: "d1",
// name: "datanested1",
// val: "D",
// items: [
// {
// id: "1",
// name: "direct Data",
// val: "E"
// },
// ]
// }
// ]
// }
console.log("data search level2 common", getFilteredData("test"));
//expected output
// [
// {
// id: "d2",
// name: "data2",
// val: "D",
// items: [
// {
// id: "21",
// name: "test21",
// val: "E"
// },
// {
// id: "22",
// name: "test23",
// val: "E"
// }
// ]
// },
// {
// id: "d3",
// name: "data23",
// val: "D",
// items: [
// {
// id: "31",
// name: "test data 3",
// val: "E"
// },
// {
// id: "32",
// name: "test data 4",
// val: "E"
// }
// ]
// }
// ];
console.log("data search level1 common", getFilteredData("2"));
// [
// {
// id: "m1",
// name: "data1",
// val: "D",
// items: [
// {
// id: "d1",
// name: "datanested1",
// val: "D",
// {
// id: "2",
// name: "test",
// val: "E"
// }
// ]
// }
// ]
// },
// {
// id: "d2",
// name: "data2",
// val: "D",
// items: [
// {
// id: "21",
// name: "test21",
// val: "E"
// },
// {
// id: "22",
// name: "test23",
// val: "E"
// }
// ]
// },
// {
// id: "d3",
// name: "data23",
// val: "D",
// {
// id: "32",
// name: "test data 4",
// val: "E"
// }
// ]
// }
// ];
Below is stackblitz which I am trying.