JS filter()

🌙
手机阅读
本文目录结构

**filter()**创建新的类型化数组,含有所有通过了测试的元素,测试由提供的函数实现。这个方法的算法和 Array.prototype.filter()相同。 TypedArray 是这里的 类型化数组类型 之一。

语法

typedarray.filter(callback[, thisArg])

参数

callback

测试类型化数组每个元素的函数,以参数 (element, index, typedarray)调用。 如果返回 true则保留该元素,如果返回false则相反。

thisArg 可选

可选,执行callback时作为this的值。

返回值

新的类型化数组,含有通过测试的元素

描述

filter方法对类型化数组中的元素调用提供的 callback函数,并且会为callback返回 true 的那些元素构造新的类型化数组。 callback 只对拥有值的类型化数组下标调用。它不会对未定义的,被删除的或者没有赋值的下标调用。没有传给callback的类型化数组的元素只是简单跳过,不会包含在新数组中。

callback以三个参数调用:

  1. 元素的值
  2. 元素下标
  3. 被遍历的类型化数组对象

如果将thisArg参数提供给filter,它会在调用时传递给callback,作为它的 this值。否则,会传递undefined 作为它的this 值。  callback最终观测到的this值由 [用于决定函数可见的this值的一般规则]来决定。

filter()不改变在其上调用的类型化数组。

filter处理的元素范围在callback调用之前就确定了。 在 filter调用之后添加到数组的元素不会由 callback访问。 如果类型化数组的现有元素被改变,或被删除,它们传给callback的值是filter 访问它们时候的值。已删除的元素不会被访问。

示例

过滤所有较小的值

下面的示例使用了 filter() 来创建过滤后的类型化数组,小于 10 的元素都被移除了。

function isBigEnough(element, index, array) {
  return element >= 10;
}
new Uint8Array([12, 5, 8, 130, 44]).filter(isBigEnough); 
// Uint8Array [ 12, 130, 44 ]

使用箭头函数过滤类型化数组的元素

[箭头函数] 为相同测试提供了更短的语法。

new Uint8Array([12, 5, 8, 130, 44]).filter(elem => elem >= 10); 
// Uint8Array [ 12, 130, 44 ]

规范

Specification Status Comment
[ECMAScript 2015 (6th Edition, ECMA-262)
TypedArray.prototype.filter](https://www.ecma-international.org/ecma-262/6.0/#sec-%typedarray%.prototype.filter) Standard 初始定义
[ECMAScript Latest Draft (ECMA-262)
TypedArray.prototype.filter](https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.filter) Draft  

浏览器兼容性

We’re converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven’t yet converted the data it contains.

  • Desktop
  • Mobile
Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support 45 38 (38) 未实现 未实现 未实现
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support 未实现 未实现 38.0 (38) 未实现 未实现 未实现

另见

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了