ECMAScript 2019:如何使用 Rest/Spread 操作符将 object 和 array 进行拆分和合并

在 JavaScript 的开发过程中,我们经常需要操作数组和对象。ECMAScript 2019 引入了 Rest/Spread 操作符,它们使得操作数组和对象更加容易和直观。本文介绍了 Rest/Spread 操作符的基本语法和用法。

1. Rest 操作符

Rest 表示把一个数组或者对象拆分成一个组合的部分,常常用于函数的参数列表和解构赋值的左手边。

1.1 在函数参数列表中使用 Rest 操作符

Rest 操作符可以让函数的参数列表变得更加灵活。使用 Rest 操作符,可以让我们在函数定义时不必提前声明函数参数的个数,而是可以把它们放在一个数组里。

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

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

在上面的例子中,sum 函数可以接受任意个数的参数,并把它们的值相加。通过将 ...numbers 放在参数列表中,我们告诉 JavaScript 把所有函数调用中传入的参数打包成一个 numbers 数组。

1.2 在解构赋值中使用 Rest 操作符

Rest 操作符还可以用在解构赋值中。使用 Rest 操作符,可以让解构赋值更加灵活场景。

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

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

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

在上面的例子中,使用 Rest 操作符 ...rest 捕获了 scores 数组中除了前两个元素之外的所有元素。

1.3 在对象中使用 Rest 操作符

Rest 操作符同样适用于对象。使用 Rest 操作符,可以让我们从一个对象中提取出一些属性,并将它们打包成一个新的对象。

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

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

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

在上面的例子中,使用 Rest 操作符 ...rest 捕获了 person 对象中除了 nameprofession 之外的所有属性。

2. Spread 操作符

Spread 操作符与 Rest 操作符有相似的语法,但是它们的功能是相反的。Spread 操作符可以将一个数组或者对象展开成一组新的值,常常用于组合数组和对象。

2.1 基本语法

在使用 Spread 操作符时,只需要在数组或者对象之前使用 ... 即可。

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

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

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

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

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

在上面的例子中,Spread 操作符 ...aa 数组展开成一个序列,...bb 数组展开成一个序列,[...a, ...b] 用于将两个序列合并成一个新的数组。与此类似,...personperson 对象的属性展开成为新的对象 profile

2.2 相同属性的合并

使用 Spread 操作符合并对象时,会覆盖重复属性的值。

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

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

在上面的例子中,y 属性的值在 a 对象和 b 对象中分别为 2 和 3,但最终的合并结果中,y 属性的值为 3,因为后面的值会覆盖前面的值。

2.3 与解构赋值一起使用

Spread 操作符可以与解构赋值一起使用,用于一次性提取出多个属性。

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

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

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

在上面的例子中,使用解构赋值语法提取出了 name 属性,并使用 Spread 操作符 ...details 提取出 person 对象除 name 属性之外的所有属性。

3. 总结

使用 Rest/Spread 操作符,可以让我们更加方便地操作数组和对象。Rest 操作符能够将数组或者对象解构成一个组合的部分,Spread 操作符则能够将数组或者对象展开成一组新的值。它们都具有相似的语法,但功能却是相反的。在 JavaScript 的开发过程中,我们需要不断研究和掌握更多的语法和技巧,来提高我们的编程能力和效率。

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


猜你喜欢

  • Koa 性能优化:使用 PM2 做进程管理,实现 CPU 利用率最优化

    概述 随着 Web 应用的复杂度越来越高,我们要面对越来越多的问题,其中包括了效率问题。对于 Node.js 这种后端语言,性能优化尤为重要。尤其在使用 Koa 框架以及其它 Node.js 库时,如...

    1 年前
  • 品牌网站开发利用 PWA 技术实现用户体验升级的思路

    什么是 PWA? PWA (Progressive Web App) 是一种利用 Web 技术开发的应用程序,具有原生应用程序的体验和功能。它采用渐进增强的方式,可以逐步提升用户体验,更好地适配各种设...

    1 年前
  • 如何处理屏幕阅读器和键盘导航在无障碍测试中的不兼容问题

    无障碍网站设计是一种让人人都能访问网站的重要实践,它可以使得有障碍的人也有机会体验网站内容,其中就包括屏幕阅读器和键盘导航的使用。 然而,在实践无障碍设计时,我们经常遇到屏幕阅读器和键盘导航在浏览器中...

    1 年前
  • 如何利用 Server-sent Events(SSE) 技术实现定时推送数据

    Server-sent Events (SSE),即服务端推送事件,是一种 HTML5 技术,在客户端与服务器之间建立长时间的连接,实现服务器推送数据到客户端。SSE 技术对于实时性要求较高的 Web...

    1 年前
  • 如何在 Docker 容器中部署 Flask 应用

    前言 Docker 是一个流行的容器化技术,可以帮助开发者更方便地部署自己的应用程序。Flask 是一个 Python web 框架,可以用来快速开发 web 应用程序。

    1 年前
  • TypeScript 中的泛型和函数重载的使用方法详解

    TypeScript 中的泛型和函数重载的使用方法详解 前端开发中,我们经常需要使用各种类型的数据,例如字符串、数字、对象等等。为了确保数据的正确性和类型安全,TypeScript 提供了泛型和函数重...

    1 年前
  • CSS Reset:全面重置页面样式或是精简优化?

    在前端开发中,我们经常需要对页面的样式进行定制,但不同浏览器有着不同的默认样式,这会导致我们的样式在不同浏览器下的呈现效果不一致。于是,CSS Reset 应运而生。

    1 年前
  • AngularJS 中 $emit 与 $broadcast 的区别及使用注意事项

    在 AngularJS 中,我们经常会使用 $emit 和 $broadcast 这两个方法来进行事件的传递和触发,充分利用事件的发布订阅机制来实现组件之间的通信,但是这两个方法有着明显的差异和使用限...

    1 年前
  • Fastify 与 React 的联用学习笔记

    随着前端技术的不断发展,现在的开发越来越需要后端和前端的紧密配合,这也促进了各种技术的交叉和融合。其中,Fastify 与 React 的联用就是一种非常有前途和发展的技术,本文将详细介绍如何使用 F...

    1 年前
  • PM2 常见问题及解决方案汇总

    什么是 PM2? PM2 是一个 Node.js 应用的进程管理器。它可以帮助我们在生产环境中方便地管理、监控和扩缩容我们的应用程序。 在使用 PM2 时,经常会遇到哪些问题呢? 1. 无法启动应用程...

    1 年前
  • Babel 编译 ES6 代码时遇到的一些大坑及解决方法

    什么是 Babel Babel 是一个 JavaScript 编译器,可以将 ES6(以及以上版本)的代码转换为向前兼容的 JavaScript 代码。它可以处理语法转换、源代码转换、编译时优化等任务...

    1 年前
  • 为什么您的企业需要切换到 GraphQL?一个前方看不见的坑

    GraphQL 是一个由 Facebook 开发的开源数据查询与操作语言,它为客户端应用程序提供了一种灵活、强大和高效的数据查询方式。相比于传统的 RESTful API,GraphQL 具有更高的灵...

    1 年前
  • 基于 Custom Elements 的人脸识别组件实现

    在实际开发中,我们经常需要使用到人脸识别的功能,比如人脸识别登录、人脸识别支付等。那么如何实现一个基于 Web 的人脸识别组件呢?本文将介绍通过使用 Custom Elements 技术来实现。

    1 年前
  • ES11:知道什么是引入动态 Import(),什么时候使用它

    在 ES11(ES2020)中,一个新的语言特性被引入,那就是引入动态 Import()。它是一个非常实用的特性,对于前端开发者来说至关重要。本文将详细介绍什么是引入动态 Import(),什么时候使...

    1 年前
  • Sass 如何提高生产效率及优化项目结构

    在前端开发中,样式表(CSS)是一个非常重要的组成部分。然而,传统的 CSS 编写方式在处理大型项目时会非常繁琐、复杂,造成样式表最终的维护难度和耗费时间的增多。为了提高生产效率,并优化项目结构,我们...

    1 年前
  • Web Components 开发中如何应对 CSS 样式作用域的问题

    当我们在开发 Web Components 时,一个常见的问题就是如何处理样式作用域。如果直接在组件中定义样式,可能会与页面中已有的样式冲突,而将样式定义在全局作用域中也不是一个好的选择。

    1 年前
  • Redis 的 HMSET 命令详解及使用说明

    介绍 Redis是一种基于内存的键值对数据库,被广泛应用于缓存、计数器、排行榜等场景。其中HMSET命令是Redis提供的一种用于同时设置多个field-value对的命令,本文将详细介绍HMSET命...

    1 年前
  • Vue.js 中如何使用 iview 进行 UI 开发

    Vue.js 中如何使用 iview 进行 UI 开发 随着前端技术的不断发展,更加注重用户体验的 UI 开发已成为前端开发中不可忽视的一部分。在众多的 UI 库中,iView 库因其对于Vue.js...

    1 年前
  • ECMAScript 2017 中新增的 Object.entries() 方法详解及其在常用对象操作中的应用

    前言 ECMAScript 2017中新增了很多的新特性,其中就包括了Object.entries()方法。这个方法的主要作用就是将一个对象转化为一个二维数组,而这个二维数组中的每一个元素包含的都是k...

    1 年前
  • 解决 ES6 中类继承的问题

    在 ES6 中,类的继承是通过 extends 关键字实现的。但是,在实际开发中,我们经常会遇到一些继承相关的问题。本文将介绍几种常见的继承问题,并提供解决方案和示例代码。

    1 年前

相关推荐

    暂无文章