-4

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

Adodis
  • 13
  • 3

1 Answers1

0

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; }
Nina Scholz
  • 376,160
  • 25
  • 347
  • 392