📅  最后修改于: 2023-12-03 15:12:12.109000             🧑  作者: Mango
在 JavaScript 中,数组对象有许多有用的成员函数,其中之一就是 filter()
。filter()
方法会创建一个新的数组,其中包含经过指定函数测试为真的所有元素。
arr.filter(callback[, thisArg])
callback
是用来测试每个元素的函数,它接收 3 个参数:当前正在处理的元素、该元素的索引和原始数组。该函数应该返回一个布尔值,指示当前元素是否应该被包含在输出的数组中。
thisArg
是可选参数,它指定了 callback
函数中的 this
的值。
下面是一个使用 filter()
方法的示例:
const numbers = [1, 2, 3, 4, 5];
const evenNumbers = numbers.filter(num => num % 2 === 0);
console.log(evenNumbers); // [2, 4]
在上面的代码中,numbers
数组包含 5 个数字,filter()
方法将一个函数传递给它来测试每个元素是否为偶数。由于数字 2 和 4 是偶数,它们被包含在输出的新数组 evenNumbers
中。
filter()
方法还可以接受一个第二个参数 thisArg
,让我们使用它来演示一个进一步的示例,此示例使用过滤器获取对象数组中给定属性的所有值:
const inventory = [
{ name: 'apples', quantity: 2 },
{ name: 'bananas', quantity: 0 },
{ name: 'cherries', quantity: 5 }
];
function findItemsByProperty(property, value) {
return this.filter(item => item[property] === value);
}
const itemsWithQuantity2 = findItemsByProperty.call(inventory, 'quantity', 2);
console.log(itemsWithQuantity2); // [{name: 'apples', quantity: 2}]
在上面的代码中,findItemsByProperty()
函数返回一个新数组,其中包含具有指定属性的所有对象。call()
方法用于将执行上下文设置为 inventory
数组,这意味着 findItemsByProperty()
函数将在该上下文中运行。
总之,filter()
是一个非常有用的成员函数,可以帮助我们轻松地从数组中获取所需的元素。它可以灵活地应用于许多不同的用例,因此无论您是新手还是经验丰富的 JavaScript 开发人员,都应该掌握这个函数。