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");