Search code examples
javascriptarraysecmascript-6ecmascript-2016

JavaScript Array Object Multi Level Search Value


I want to search in JavaScript multi-level array object.

[{ "head": "Heading 1", "list": [ { "name": "name 1", "desc": "desc 1" },{ "name": "name 1", "desc": "desc 1" }] },{ "head": "Heading 2", "list": [ { "name": "name 1", "desc": "desc 1" },{ "name": "name 1", "desc": "desc 1" }] }]

If we search for "Heading 2"

Expected Result :

[{ "head": "Heading 2", "list": [ { "name": "name 1", "desc": "desc 1" },{ "name": "name 1", "desc": "desc 1" }] }]

If we search for "name 1"

Expected Result :

[{ "head": "Heading 1", "list": [ { "name": "name 1", "desc": "desc 1" },{ "name": "name 1", "desc": "desc 1" }] },{ "head": "Heading 2", "list": [ { "name": "name 1", "desc": "desc 1" },{ "name": "name 1", "desc": "desc 1" }] }]

Looking for an optimized way to do this search. Can anyone help me with this problem?

UPDATED: Invalid JSON Format


Solution

  • You could take an recursive search for the wanted value of a nested value of a given object.

    function filter(array, value) {
        function find(object) {
            return Object
                .values(object)
                .some(v => v === value || v && typeof v === 'object' && find(v));
        }
    
        return array.filter(find);
    }
    
    var array = [{ head: "Heading 1", list: [{ name: "name 1", desc: "desc 1" }, { name: "name 1", desc: "desc 1" }] }, { head: "Heading 2", list: [{ name: "name 1", desc: "desc 1" }, { name: "name 1", desc: "desc 1" }] }]
    
    console.log(filter(array, "Heading 2"));
    console.log(filter(array, "name 1"));
    .as-console-wrapper { max-height: 100% !important; top: 0; }