Get to know MDN better
此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。
filter() 方法创建给定数组一部分的浅拷贝,其包含通过所提供函数实现的测试的所有元素。
为数组中的每个元素执行的函数。它应该返回一个真值以将元素保留在结果数组中,否则返回一个假值。该函数被调用时将传入以下参数:
element数组中当前正在处理的元素。
index正在处理的元素在数组中的索引。
array调用了 filter() 的数组本身。
thisArg可选执行 callbackFn 时用作 this 的值。参见迭代方法。
返回给定数组的一部分的浅拷贝,其中只包括通过提供的函数实现的测试的元素。如果没有元素通过测试,则返回一个空数组。
filter() 方法是一个迭代方法。它为数组中的每个元素调用提供的 callbackFn 函数一次,并构造一个由所有返回真值的元素值组成的新数组。未通过 callbackFn 测试的数组元素不会包含在新数组中。
callbackFn 仅对已分配值的数组索引调用。它不会对稀疏数组中的空槽调用。
filter() 方法是一个复制方法。它不会改变 this,而是返回一个包含与原始数组相同的元素(其中某些元素已被过滤掉)的浅拷贝。但是,作为 callbackFn 的函数可以更改数组。请注意,在第一次调用 callbackFn 之前,数组的长度已经被保存。因此:
警告:上述类型的并发修改经常导致难以理解的代码,通常应避免(特殊情况除外)。
filter() 方法是通用的。它只期望 this 值具有 length 属性和整数键属性。
以下示例使用 filter() 创建一个过滤数组,该数组删除了所有值小于 10 的元素。
下面的例子返回数组中的所有素数:
备注:isPrime() 实现仅供演示。在实际应用中,为了避免重复计算,会使用大量记忆化的算法,例如埃拉托斯特尼筛法。
以下示例使用 filter() 创建具有非零 id 的元素的 json。
下例使用 filter() 根据搜索条件来过滤数组内容。
filter() 将跳过空槽。
filter() 方法读取 this 的 length 属性,然后访问每个整数索引。
下面的示例测试在修改数组时 filter() 方法的行为。
| ECMAScript® 2027 Language Specification # sec-array.prototype.filter |
启用 JavaScript 以查看此浏览器兼容性表。