ES10 中的 Array.from() 方法详解及注意事项

在 ES10 中,Array 对象新增了一个静态方法 Array.from()。该方法可以将一个类数组对象或可迭代对象转换成一个新的数组实例。在前端开发中,我们经常会碰到需要将类似数组的对象或可迭代对象转换成数组的场景,Array.from() 方法可以大大地简化我们的代码,提高开发效率。本文将详细介绍 Array.from() 方法的使用方法、注意事项以及示例代码,帮助大家更好地理解这个方法。

语法

Array.from(obj[, mapFn[, thisArg]])

  • obj:类数组对象或可迭代对象。
  • mapFn:可选参数,映射函数,用于对数组中的每个元素进行处理后返回新数组。一般使用箭头函数或 function 声明一个回调函数,在该函数中对每个数组元素进行处理操作。默认值为 item => item,即不对数组中的元素进行任何处理。
  • thisArg:可选参数,用于绑定 mapFn 中 this 的值。如果省略这个参数,则 mapFn 回调中的 this 就是 undefined。

使用方法

将类数组对象转换成数组

首先,我们来看一下将类数组对象转换成数组的场景。类数组对象是指具有 length 属性且可以通过下标访问的对象,比如 NodeLists 或 arguments 对象。在以前,我们通常需要手写一个 for 循环遍历对象并逐个将其添加到新的数组中。但是,使用 Array.from() 方法,我们可以轻松实现该功能。

--- ------- - -
  -- -------
  -- ------
  ------- -
--

--- --- - --------------------
----------------- -- -------- ------

以上示例中,我们将 arrLike 对象转换成了一个新的数组实例 arr。在 Array.from() 方法中传入了一个类数组对象 arrLike,该方法会通过遍历这个对象的元素并逐个添加到新的数组中,最终返回这个新的数组。

将可迭代对象转换成数组

除了类数组对象,我们还可以使用 Array.from() 方法将可迭代对象转换成数组。可迭代对象是指具有 Symbol.iterator 属性的对象,比如 Set、Map 等。

--- --- - --- ------------ --------
--- --- - ----------------
----------------- -- -------- ------

以上示例中,我们将 Set 对象转换成了一个新的数组实例 arr。在 Array.from() 方法中传入了一个可迭代对象 set,该方法会遍历这个对象的元素并逐个添加到新的数组中,最终返回这个新的数组。

使用 mapFn 映射新数组元素

除了将类数组对象或可迭代对象转换成数组外,Array.from() 方法还支持使用 mapFn 参数来映射新数组元素。在调用 Array.from() 方法时指定一个回调函数,在该函数中对每个数组元素进行处理操作,从而生成一个新的数组。这种方式可以帮助我们快速地对数组中的元素进行处理。

--- --- - --- -- ---
--- ---- - --------------- ---- -- ---- - ---
------------------ -- --- -- --

以上示例中,我们将数组 arr 中的每个元素乘以 2,生成一个新的数组 arr2。第二个参数 item => item * 2 就是我们传入的映射函数,它将数组中的每个元素进行乘法操作,最终返回一个新的数组。

使用 thisArg 绑定映射函数中 this 的值

有时候,在我们使用 mapFn 映射新数组元素时,可能需要在映射函数中使用 this 关键字引用某个对象。在这种场景下,我们可以使用 thisArg 参数来绑定映射函数中 this 的值。

--- --- - -
  ------ -
--
--- --- - --- -- ---
--- ---- - --------------- -------------- -
  ------ ---- - -----------
-- -----
------------------ -- --- -- --

以上示例中,我们将数组 arr 中的每个元素乘以 obj 中的 count 属性,生成一个新的数组 arr2。在映射函数中使用了 this.count 引用了 obj 中的 count 属性。在 Array.from() 方法中,我们将第三个参数指定为 obj,这样在映射函数中就可以正确地引用 this。如果省略 thisArg 参数,映射函数中的 this 就是 undefined。

注意事项

在使用 Array.from() 方法时,需要注意以下几点:

  1. 类数组对象中必须具有 length 属性。否则会抛出 TypeError 异常。
  2. 在映射函数中无法访问类数组对象的原型链上的方法和属性。因为 Array.from() 方法创建的是一个新的数组实例,不包含原型链上的方法和属性。
  3. 在映射函数中可以使用 this 关键字引用任意对象。但是,如果忘记传入 thisArg 参数,则 this 关键字会被自动绑定为 undefined。
  4. 在映射函数中尽量不要改变原数组中的元素或者产生副作用。这样会导致代码不可预测,难以维护。

总结

Array.from() 方法是一个非常实用的方法,它可以将类数组对象或可迭代对象转换成数组,并且支持使用映射函数对数组元素进行处理操作。在使用 Array.from() 方法时,需要注意参数和映射函数的使用方法,以及避免产生副作用和改变原数组元素。通过掌握该方法,可以大大简化我们的代码,提高开发效率。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64c66a9110032fedd38d1310


猜你喜欢

  • 解决 RESTful API 返回数据不规范造成的解析问题

    作为前端开发者,我们经常需要与 RESTful API 打交道。然而,有时候从 API 中获得的数据格式并不总是符合我们的期望。这时就需要我们额外注意,并进行解析。

    1 年前
  • Flutter 性能优化实践总结

    Flutter已经成为了移动应用开发的重要技术之一,优秀的Flutter应用离不开良好的性能表现,本文对于常见的Flutter性能优化实践进行总结,提供给读者学习和指导。

    1 年前
  • 如何在 Chai 中断言一个字符串是否包含特定的子串

    如何在 Chai 中断言一个字符串是否包含特定的子串 Chai 是一个 JavaScript 的断言库,用于 JavaScript 测试框架如 Mocha 和 Jasmine 等。

    1 年前
  • Webpack + babel + es6 常见问题及解决方案

    Webpack + Babel + ES6 常见问题及解决方案 随着前端技术的快速发展,越来越多的新技术被引入到前端开发中。其中,Webpack + Babel + ES6 已成为前端开发中的热门技术...

    1 年前
  • 从 lazy load 到 react 不渲染 dom 块:ES11 中优化算法的应用

    在现代的前端开发中,页面加载速度对用户体验至关重要。因此,为了加快页面加载速度,我们需要注意一些优化算法。本文将介绍一些在 ES11 中优化算法的应用,包括从 lazy load 到 react 不渲...

    1 年前
  • 如何在 PWA 中使用 Web Push Notification?

    Web Push Notification 是一种基于浏览器的消息推送系统,它可以让网站的用户在浏览器关闭的情况下,也能够接收到站内提醒。这对于 PWA 应用来说,是一种非常实用的功能,能够提高用户的...

    1 年前
  • Serverless 框架使用小结

    在当今的互联网时代,前端技术的快速发展和 Serverless 架构的出现,使得前端开发者不再局限于传统的代码编写和服务器部署。Serverless架构已经成为一种热门趋势,它赋予开发者更高效的代码编...

    1 年前
  • ECMAScript 2019 (ES10):解决 JavaScript 中 HTML 转义的问题

    在编写前端代码的时候,我们经常需要对用户输入的内容进行转义,以防止 XSS 攻击等安全问题。在 JavaScript 中,我们通常使用 escape() 或者 encodeURI() 进行 URL 转...

    1 年前
  • Redis 性能优化方案分享

    简介 Redis 是一种高性能的缓存和键值存储数据库,常用于存储常用的数据结构和提供高可用性的缓存。在实际的项目中,如果使用不当会导致 Redis 性能不佳甚至宕机,因此了解 Redis 的性能优化方...

    1 年前
  • Fastify 中的静态文件夹解决方案

    在 Web 开发中,静态文件夹是我们经常用到的一种资源,如 HTML、CSS、JavaScript、图片等。 Fastify 是一个快速高效的 Node.js Web 框架,它提供了现成的解决方案来处...

    1 年前
  • 在 Sequelize 中如何实现数据校验和错误处理

    Sequelize 是 Node.js 中一款基于 Promise 的 ORM 框架,它提供了方便的数据库操作接口,支持多种数据库类型。但在实际应用中,由于数据的业务逻辑复杂,数据的合法性校验和错误处...

    1 年前
  • 手写 Promise.all 的实现方式

    简介 Promise.all 是 Promise 对象的一个方法,用来将多个 Promise 实例包装成一个新的 Promise 实例。它接收一个数组作为参数,数组中的每个元素都是一个 Promise...

    1 年前
  • 使用 Next.js、Firebase 和 Algolia 打造实时搜索引擎

    介绍 随着互联网的不断发展和数据量的不断增加,搜索引擎已经成为了我们生活中不可或缺的一部分。但是常规的搜索引擎搜索速度、效率和准确率都存在一些问题,同时实时搜索引擎也越来越受到开发者的关注和喜爱。

    1 年前
  • 在 Vue.js 中使用 Custom Elements 的最佳实践

    在前端开发中,使用 Custom Elements 可以将 HTML 标签封装成自定义组件,提高代码的复用性和可维护性。Vue.js 不仅内置了组件系统,还可以很好地支持 Custom Element...

    1 年前
  • Mongoose 中使用 FindByIdAndUpdate 的注意事项

    Mongoose 是一款优秀的 Node.js ORM,广泛应用于 Web 应用程序的数据库操作中。其中的 FindByIdAndUpdate 是 Mongoose 提供的一个非常常用的函数之一。

    1 年前
  • 如何在 Enzyme 测试中测试 React 组件中的图片

    随着 React 越来越受欢迎,前端测试变得越来越重要。在测试 React 组件时,一种常见的需求就是测试组件中包含的图片是否正确显示。 本文将详细介绍如何在 Enzyme 测试中测试 React 组...

    1 年前
  • 解决多列 Flexbox 布局中的盒子宽度不均等问题

    在使用 Flexbox 布局时,如果出现多列布局的情况,常常会遇到盒子宽度不均等的问题。这不仅影响布局的美观度,还会对用户体验造成不良影响。本文将介绍如何解决多列 Flexbox 布局中的盒子宽度不均...

    1 年前
  • 如何在 Deno 应用中使用 JSON Web Token 进行用户认证和授权?

    在前端开发中,用户认证和授权是一个必不可少的部分。JSON Web Token (JWT) 是一种常用的身份验证机制,它使用 JSON 格式并且可以被加密,用于在用户和服务器之间传递信息。

    1 年前
  • 使用 LESS 完成响应式网站开发

    在前端开发中,许多开发者会使用 CSS 来控制网页的样式。但是,CSS 的语法和功能有着一定的限制,导致在开发过程中可能会遇到一些挑战。而 LESS,作为一种 CSS 预处理器,能够让开发者更加高效地...

    1 年前
  • Angular 中如何集成第三方 JS 库

    随着前端开发的不断发展,现在许多的第三方 JS 库都可以提供我们开发所需的功能和效果,如何在 Angular 应用中集成这些库,是每个 Angular 开发者必须要学会的一项技能。

    1 年前

相关推荐

    暂无文章