Javascript: filter array of objects by array of strings

Just make use of Array.indexOf

var b = a.filter(function(item){return kpids.indexOf(item.id) > -1 });

Array.indexOf returns the index of the argument passed in the array on which indexOf is being called on. It returns -1 if there isn't the element which we are looking for.

So, we make sure that it index is greater than -1


Another nice alternative is using .filter with .includes:

var result = a.filter(item => kpis.includes(item.id))

You can use indexOf in filter, like this

var res = a.filter(function (el) {
  return kpis.indexOf(el.id) >= 0; 
});

Example