根据单独的对象键、值过滤对象数组

Sac*_*ria 2 javascript arrays object filter javascript-objects

我有以下一组人:

  const FIRST_ARRAY = [
    {
      name: 'Simon',
      age: 32,
      occupation: 'Student'
    },
    {
      name: 'Vera',
      age: 22,
      occupation: 'Developer'
    }
  ];
Run Code Online (Sandbox Code Playgroud)

我想过滤数组以生成基于“过滤器”对象的单独数组。

例如,如果我的过滤器是:

  const FILTERS = {
    age: 32,
    name: 'John',
    occupation: ''
  };
Run Code Online (Sandbox Code Playgroud)

新数组应该为空,因为数组中没有人拥有 32 和 John 的组合。但是,如果我的过滤器是:

 const FILTERS = {
    age: 32,
    name: 'Simon',
    occupation: ''
  }
Run Code Online (Sandbox Code Playgroud)

返回的新人员数组将是:

 const NEW_ARRAY = [
    {
      name: 'Simon',
      age: 32,
      occupation: 'Student'
    }
  ];
Run Code Online (Sandbox Code Playgroud)

如何通过迭代“过滤器”对象值来过滤人员数组?请记住,过滤器键和值会一直动态变化。

Sco*_*ger 5

您可以按如下方式进行过滤:

const FIRST_ARRAY = [
  {
    name: 'Simon',
    age: 32,
    occupation: 'Student'
  },
  {
    name: 'Vera',
    age: 22,
    occupation: 'Developer'
  }
];

const FILTERS = {
  name: 'Simon',
  age: 32,
  occupation: ''
};

const filtered = FIRST_ARRAY.filter(person => Object.entries(FILTERS)
  .every(([key, val]) => val !== '' ? person[key] === val : true));
  
console.log(filtered);
Run Code Online (Sandbox Code Playgroud)