Vlada
Vlada

Reputation: 258

Filter function for an array of objects

I need to implement function that filters array of objects. Filters array consists of objects with property names and values to be filtered for given property in users.

Example:

var filters = [
  {
    column: 'username',
    value: 'test user'
  },
  {
    column: 'name',
    value: 'test name'
  }
]

var users = [
    {
      name: 'test name user',
      username: 'some test user'
    },
    {
      name: 'another name',
      username: 'another username'
    }
]

// filter logic

console.log(users); // [{'name': 'test name user', 'username': 'some test user'}]

Upvotes: 0

Views: 4407

Answers (2)

fauster01
fauster01

Reputation: 66

You can also use Functions#ArrowFunctions and сhange the original array like:

var filters = [{"column":"username","value":"test user"},{"column":"name","value":"test name"}];

var users = [{"name":"test name user","username":"test user"},{"name":"another name","username":"another username"}];

users = users.filter((user) => {
  return filters.some((filter) => {
    return user[filter.column] === filter.value;
  });
});

console.log(users);

Upvotes: 1

Ori Drori
Ori Drori

Reputation: 191976

You can iterate the list of user and Array#filter them by iterating with Array#some (Or - if at least one matches) or Array#every (And - all must match).

var filters = [{"column":"username","value":"test user"},{"column":"name","value":"test name"}];

var users = [{"name":"test name user","username":"test user"},{"name":"another name","username":"another username"}];

var result = users.filter(function(user) {
  return filters.some(function(filter) { // use some for Or, and every for And
    return user[filter.column] === filter.value;
  });
});

console.log(result);

Upvotes: 4

Related Questions