📌  相关文章
📜  如何根据属性过滤对象数组?(1)

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

如何根据属性过滤对象数组?

有时我们需要从一个对象数组中筛选符合特定条件的对象,可以通过属性过滤实现。下面是几种方法:

1. 使用for循环和if语句

使用for循环遍历对象数组,通过if语句判断对象的某个属性是否符合条件,将符合条件的对象添加到新数组中。示例代码如下:

const array = [
  { name: 'Tom', age: 18 },
  { name: 'John', age: 22 },
  { name: 'Jane', age: 20 },
  { name: 'Alice', age: 25 }
];

const newArray = [];
for (let i = 0; i < array.length; i++) {
  if (array[i].age > 20) {
    newArray.push(array[i]);
  }
}

console.log(newArray); // [{ name: 'John', age: 22 }, { name: 'Alice', age: 25 }]
2. 使用filter方法

数组的filter方法可以筛选符合条件的元素,返回一个新的数组。把筛选条件封装成一个函数,传入filter方法中即可。示例代码如下:

const array = [
  { name: 'Tom', age: 18 },
  { name: 'John', age: 22 },
  { name: 'Jane', age: 20 },
  { name: 'Alice', age: 25 }
];

const newArray = array.filter((item) => item.age > 20);

console.log(newArray); // [{ name: 'John', age: 22 }, { name: 'Alice', age: 25 }]
3. 使用reduce方法

reduce方法可以将数组按某种规则转化成一个值,根据条件筛选则可以返回筛选后的数组或者一个布尔值。示例代码如下:

const array = [
  { name: 'Tom', age: 18 },
  { name: 'John', age: 22 },
  { name: 'Jane', age: 20 },
  { name: 'Alice', age: 25 }
];

// 返回符合条件的对象数组
const newArray = array.reduce((acc, curr) => {
  if (curr.age > 20) {
    acc.push(curr);
  }
  return acc;
}, []);

console.log(newArray); // [{ name: 'John', age: 22 }, { name: 'Alice', age: 25 }]

// 判断是否存在符合条件的对象
const hasAgeOver20 = array.reduce((acc, curr) => {
  if (curr.age > 20) {
    acc = true;
  }
  return acc;
}, false);

console.log(hasAgeOver20); // true

以上三种方法都可以实现根据属性过滤对象数组的功能,具体使用哪种方法,可以根据实际情况选择。