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
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; }