📌  相关文章
📜  js 通过另一个对象过滤对象数组 - Javascript (1)

📅  最后修改于: 2023-12-03 14:43:33.606000             🧑  作者: Mango

JS 通过另一个对象过滤对象数组 - Javascript

在JavaScript编程中,我们常常需要对对象数组进行过滤操作。在这个过程中,我们可以利用另一个对象来进行过滤操作。本文将介绍如何使用JavaScript实现这个功能。

使用ES6的Filter方法

使用ES6的filter()方法可以方便地过滤对象数组。该方法返回新的数组,其中包含满足过滤条件的元素。

假设我们有一个名为initialArray的对象数组。我们希望根据filterObject对象的属性过滤该数组。我们可以使用以下代码实现:

const initialArray = [
  { name: 'John', age: 28, country: 'USA' },
  { name: 'Marie', age: 22, country: 'France' },
  { name: 'Mark', age: 35, country: 'USA' },
  { name: 'Jane', age: 19, country: 'Germany' },
];

const filterObject = { country: 'USA', age: 28 };

const filteredArray = initialArray.filter((item) => {
  for (let key in filterObject) {
    if (item[key] === undefined || item[key] != filterObject[key])
      return false;
  }
  return true;
});

上述代码中,我们使用箭头函数传递给filter()方法来过滤initialArray数组。我们首先遍历filterObject对象中的每个属性,检查是否存在于当前数组元素的属性中。如果该属性不存在于当前元素中,或者该属性的值不等于当前元素中该属性的值,则该元素不满足过滤条件,返回false。如果当前元素满足所有属性的条件,则返回true,表示该元素将被包含在返回的数组中。

现在,filteredArray数组包含了initialArray数组中所有满足过滤条件的元素。

使用Lodash的Filter方法

如果你想使用更简洁的方式来过滤对象数组,Lodash库提供了filter()方法来轻松地实现这个功能。

使用Lodash的filter()方法,我们可以构建一个返回一个符合过滤条件的对象的函数matches()。该函数将使用Lodash的.matches()方法来检查给定对象是否符合传递进来的参数。

以下代码展示如何使用Lodash的filter()matches()方法过滤对象数组:

const _ = require('lodash');

const initialArray = [
  { name: 'John', age: 28, country: 'USA' },
  { name: 'Marie', age: 22, country: 'France' },
  { name: 'Mark', age: 35, country: 'USA' },
  { name: 'Jane', age: 19, country: 'Germany' },
];

const filterObject = { country: 'USA', age: 28 };

const filteredArray = _.filter(initialArray, _.matches(filterObject));

我们首先使用require()函数导入Lodash库。然后,我们使用箭头函数传递给filter()方法,利用matches()方法检查数组中的每个元素是否符合filterObject对象中指定的属性和值。如果符合,则将元素包含在返回的数组中。

现在,filteredArray数组包含了initialArray数组中所有满足过滤条件的元素。

总结一下,我们介绍了使用ES6的filter()方法和Lodash库的filter()matches()方法来过滤对象数组。这些方法都很容易实现,并且可以使代码更加简洁、易读。