-1

I have an array of objects and I'd like to filter out objects based on matching values.

var a = [
    {name:'xyz' , grade :'x'},
    {name:'yaya' , grade :'x'},
    {name:'x' , frade:'d'},
    {name:'a',grade:'b'}
]

If I want to filter on 'x' then I'd expect the following results:

[
    {name:'xyz' , grade :'x'},
    {name:'yaya' , grade :'x'},
    {name:'x' , frade:'d'},
]

I have tried this

   a.filter(function(d) {
        return d.name.toLowerCase().indexOf(searchKey.toLowerCase()) > -1 ||
            d.grade.toLowerCase().indexOf(searchKey.toLowerCase()) > -1
    });

but I don't want hardcoded keys.

Ashutosh Jha
  • 15,451
  • 11
  • 52
  • 85

1 Answers1

0
function yourSearch (array, search) {

    return array.filter((el) => {
      for (let param in el) {
        if (el.hasOwnProperty(param) && Array.isArray(el[param])) {
          if (el[param].indexOf(search) !== -1) return true;
        }
      }
    });

}

enjoy

if without es6 replace (el) => with function (el)

edit: added reply to comment

Jacek Pietal
  • 1,980
  • 1
  • 18
  • 27