JSFiddle - React, Tailwind, and code Playground
by Julian
JavaScript
var data = [
{
"Object": "Car",
"Child": [
{
"Object": "Toyota",
"Child": [
{
"Object": "Prius"
},
{
"Object": "Yaris"
}
]
},
{
"Object": "Honda",
"Child": [
{
"Object": "Accord"
},
{
"Object": "Civic",
"Child": [
{
"Object": "Sedan"
},
{
"Object": "Coupe"
}
]
}
]
}
]
}
];
function Lineal_Descendant(child, parent) {
// search in an array of objects
function walk(array, search) {
for (var x=0, found; x<array.length; x++) {
found = visit(array[x], search);
if (found) return found;
}
return false;
}
// search an object and its children
function visit(obj, search) {
// found search
return obj.Object === search ? obj :
// not found, but has children
obj.Child ? walk(obj.Child, search) :
// no children
false;
}
// find parent
parent = walk(data, parent);
// find child, converting to boolean
if (parent) return !!walk(parent.Child || [], child);
}
console.log(Lineal_Descendant("Sedan","Civic"), "true");
console.log(Lineal_Descendant("Sedan","Toyota"), "false")
console.log(Lineal_Descendant("Prius","Honda"), "false")
console.log(Lineal_Descendant("Yaris","Car"), "true");