Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

150
Views
Filter by children and return parent plus children in a nested array of objects

I have an array of objects like the one below and I'm looking to get the parent (Dashboard) and the name of its child when searching for 'Summary'

[
  {
     Dashboard1: [
       {name: 'Summary'},
       {name: 'SomeThingElse'},
       {name: 'SomeThingElse2'}
     ]
  },
  {
     Dashboard2: [
       {name: 'Summary'},
       {name: 'Different'},
       {name: 'Different2'}
     ]
  },
  {
     Dashboard3: [
       {name: 'Summary'},
       {name: 'AnotherDifferent'},
       {name: 'AnotherDifferent2'}
     ]
  },
  {
     Dashboard4: [
       {name: 'AnotherDifferent'},
       {name: 'AnotherDifferent2'}
       {name: 'AnotherDifferent3'},
       {name: 'AnotherDifferent4'},
     ]
  }
]

I have an input that searches for 'Summary' and I want it to return just

[
  {
    Dashboard1: [
      {name: 'Summary'},
    ]
  },
  {
    Dashboard2: [
      {name: 'Summary'},
    ]
  },
  {
    Dashboard2: [
      {name: 'Summary'},
    ]
  }
]

I have this function that filters Dashboard4 where Summary is not present as a child but returns all children as well.

function filterByValue(array, value) {
    return array.filter((data) =>  JSON.stringify(data).toLowerCase().indexOf(value.toLowerCase()) !== -1);
}

Thanks!

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

const a = [
  {
     Dashboard1: [
       {name: 'Summary'},
       {name: 'SomeThingElse'},
       {name: 'SomeThingElse2'}
     ]
  },
  {
     Dashboard2: [
       {name: 'Summary'},
       {name: 'Different'},
       {name: 'Different2'}
     ]
  },
  {
     Dashboard3: [
       {name: 'Summary'},
       {name: 'AnotherDifferent'},
       {name: 'AnotherDifferent2'}
     ]
  },
  {
     Dashboard4: [
       {name: 'AnotherDifferent'},
       {name: 'AnotherDifferent2'},
       {name: 'AnotherDifferent3'},
       {name: 'AnotherDifferent4'},
     ]
  }
];

function filterByValue(array, value) {
    const result = [];
    array.forEach(e => {
        const keys = Object.keys(e);
        const obj = {};
        keys.forEach(k => {
            const matches = e[k].filter(i => i.name === value);
            if (matches.length > 0) {
                obj[k] = matches;
            }
        });
        if (Object.keys(obj).length > 0) {
            result.push(obj);
        }
    });
    return result;
}

console.log(filterByValue(a, 'Summary'));

about 4 years ago · Juan Pablo Isaza Report

0

This is a reusable function for a similar scenario.

const searchNestedArraySearch = (val, arr, key, childKey) => {

const newArr = arr.map((e, i) => {

//Get the propert need from nested object via the key and appending the index
let firstChildObj = e[`${key}${i + 1}`];

console.log(firstChildObj);

// loop through the nested property array
const checkProperty = firstChildObj.map((e) => {
  const valueProp = e[childKey] === val ? true : false;

  if (valueProp) {
    return { [childKey]: val };
  } else {
    return null;
  }
});

// remove null value from each array to get specified search
const filterEmpty = checkProperty.filter((val) => val !== null);

// return array of property containing search value
if (filterEmpty.length) {
  return { [`${key}${i + 1}`]: filterEmpty };
}

});

return newArr.filter((e) => e !== undefined); };

console.log(searchNestedArray("Summary", data, "Dashboard", "name"));

/**

  • Filter value from nested object
  • @param {String} val
  • @param {Array} arr
  • @param {string} key
  • @param {String} childKey */
about 4 years ago · Juan Pablo Isaza Report

0

Given the array, you can use a more coincise function like that:

    const array = [
  {
     Dashboard1: [
       {name: 'Summary'},
       {name: 'SomeThingElse'},
       {name: 'SomeThingElse2'}
     ]
  },
  {
     Dashboard2: [
       {name: 'Summary'},
       {name: 'Different'},
       {name: 'Different2'}
     ]
  },
  {
     Dashboard3: [
       {name: 'Summary'},
       {name: 'AnotherDifferent'},
       {name: 'AnotherDifferent2'}
     ]
  },
  {
     Dashboard4: [
       {name: 'AnotherDifferent'},
       {name: 'AnotherDifferent2'},
       {name: 'AnotherDifferent3'},
       {name: 'AnotherDifferent4'},
     ]
  }]

const filterByValue = (array, value) => array.filter(el => {
    const objValues = Object.values(el).flat()
    const elementsValues = objValues.map(v => Object.values(v)).flat()
    return elementsValues.some(v => v.includes(value))
})

console.log(filterByValue(array, 'Summary'));
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!