132
rated 0 times
[
136]
[
4]
/ answers: 1 / hits: 5172
/ 3 Years ago, fri, august 27, 2021, 12:00:00
So I have a multiple array of object and each object my contain a child.
e.g
const data = [
{
id: 1,
name: 'parent 1',
children: [
{
id: 'c1',
name: 'child 1',
children: [
{
id: 'g1',
name: 'grand 1',
children: [],
},
],
},
],
},
{
id: 2,
name: 'parent 2',
children: [
{
id: 2,
name: 'c1',
children: [],
},
],
},
{ id: 3, name: 'parent 3', children: [] },
];
what I wanted to happen is that if the Id that I'm searching for is
'g1', I would get the result
const result = ['parent 1', 'c1', 'grand 1']
the loop would only stop and get all the names that it went thru until the condition, in this case the id, is met
current approach done
/**
* Details
* @param id the value you are searching for
* @param items nested array of object that has child
* @param key name of the value you are looking for
* @returns string of array that matches the id
* @example ['parent 1', 'c1', 'grand 1']
*/
export function findAll(id: string, items: any, key: string): string[] {
let i = 0;
let found;
let result = [];
for (; i < items.length; i++) {
if (items[i].id === id) {
result.push(items[i][key]);
} else if (_.isArray(items[i].children)) {
found = findAll(id, items[i].children, key);
if (found.length) {
result = result.concat(found);
}
}
}
return result;
}
More From » arrays