ES6的扩展运算符 [...arr]

实例分析Array.from(arr)与[…arr]到底有何不同 写在开头: 在正文开始之前我们先说明一下类数组(估计大家一定不会陌生) 类数组的特点 1.有索引 2.有长度 3.是个对象 4.能被迭代 特点说明:对于类数组的特点前三个我就不做说明了哈,主要就是最后一个,能被迭代需要具备什么呢?由图我们可以看出有一个[Symbol.iterator]属性指向该对象的默认迭代器方法。那么它又是如何实现的呢? 迭代器(iterator) 作用(参考阮一峰老师的ES6) 1.为各种数据结构提供一个统一的,简单的访问接口 2.使数据结构的成员能按照某种次序排序 3.供for…of循环消费 工作原理 1.创建一个指针对象,指向当前数据结构的起始位置(并 立即下载

ES6的扩展运算符可以说是非常使用的,在给多参数函数传参,替代Apply,合并数组,和解构配合进行赋值方面提供了很好的便利性。

数组去重

var arr = [1,2,3,4,5,2,3,1];

var set = new Set(arr);

var newArr = [...set ];

最终得到的newArr就是一个去了重的数组

扩展运算符就是三个点“...”,就是将实现了Iterator 接口的对象中的每个元素都一个个的迭代并取出来变成单独的被使用。

看这个例子:

?

1

console.log(...[3, 4, 5])

结果:

3 4 5

调用其实就是:

?

1

console.log(3, 4, 5)

合并数组

可以使用扩展运算符将多个数组进行合并。

?

1

2

3

4

let arr1 = [1, 2, 3]

let arr2 = [4, 5, 6]

let arr3 = [7, 8, 9]

console.log([...arr1, ...arr2, ...arr3])

结果:

[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]

函数多参数传递, 替换Apply

先把参数定义成数组,函数定义好。

?

1

2

3

4

let arr4 = ['arg1', 'arg2', 'arg3', 'arg4']

let fun1 = (a1, a2, a3, a4) => {

 console.log( a1, a2, a3, a4)

}

在ES6前,要把数组参数传递给函数,要么按照下标访问数组元素去调用函数,缺点是数组个数和函数参数个数完全绑定,有一个个数发生变化,那么就要修改了。

?

1

fun1(arr4[0], arr4[1], arr4[2], arr4[3])

要么就用Apply进行调用,结果当然是没毛病,也是ES6之前用的最多的。

?

1

fun1.apply(null, arr4)

如果是用扩展运算符,那就方便咯。

?

1

fun1(...arr4)

结果:

arg1 arg2 arg3 arg4

调用简洁爽快。

与解构配合赋值

配合使用,可以从数组中提取除第一个以后的所有元素成另外一个数组。

?

1

2

3

let [var1, ...arr5] = [1, 2, 3, 4, 5, 6]

console.log(var1)

console.log(arr5)

结果:

1
[ 2, 3, 4, 5, 6 ]

但要注意,与解构配合时,扩展运算符只能用在最后一个上,否则报错。

可以展开实现了Iterator 接口的对象

比如Map,Set,数组就是从Iterator接口实现来的,Object不是,所以扩展Object会报错。

扩展Set。

?

1

2

3

4

5

let set1 = new Set()

set1.add(1)

set1.add(2)

set1.add(3)

console.log(...set1)

结果:

1 2 3

扩展Map。

?

1

2

3

4

5

let map1 = new Map();

map1.set('k1', 1);

map1.set('k2', 2);

map1.set('k3', 3);

console.log(...map1)

结果:

[ 'k1', 1 ] [ 'k2', 2 ] [ 'k3', 3 ]

注意,扩展出来的一个个的数组,按照map的键值对结构,每个数组都是2个元素,一个是key,一个是value。

如果扩展Object,就会报错。

?

1

2

3

4

5

6

let obj1 = {

  p1: 1,

  p2: 2,

  p3: 3

}

console.log(...obj1)

报错。

国产机载操作系统天脉ACoreOS实战:从零搭建开发环境到应用移植 本文详细介绍了国产机载操作系统天脉ACoreOS的实战开发流程,从核心特性解析到开发环境搭建,再到VxWorks应用移植策略。重点阐述了其符合ARINC 653标准的时空分区架构如何保障高可靠性,并提供了从零创建分区工程、重构通信与任务代码的具体步骤,为开发者向这一国产化平台迁移提供了实用指南。 阅读详情

相关推荐

Autodesk Genuine Service卸载失败?试试这个隐藏文件删除法(Win8-Win11通用)

本文针对Autodesk Genuine Service在Windows系统(Win8-Win11)中卸载失败的常见难题,提供了深度解析与根治方案。核心方法是手动定位并删除两个关键的隐藏文件(ProductInformation.pit和id.dat),以解除文件锁定或数据损坏导致的卸载障碍,随后再通过标准流程即可成功卸载。该方法通用性强,能有效解决这一困扰设计师和工程师的顽固问题。

weixin_29220405的博客 1474

ES6,扩展运算符的用途

ES6的扩展运算符可以说是非常使用的,在给多参数函数传参,替代Apply,合并数组,和解构配合进行赋值方面提供了很好的便利性。 扩展运算符就是三个点“...”,就是将实现了Iterator 接口的对象中的每个元素都一个个的迭代并取出来变成单独的被使用。 看这个例子: console.log(...[3, 4, 5]) 结果: 3 4 5 调用其实就是: conso...

weixin_34392843的博客 553

全网首发!Yolov8_obb旋转框训练、测试、推理手把手教学(DOTA1.0数据集map50已达80%)

其中,images/train和images/val放置原始图片文件,labels/train_original和labels/val_original分别放置原始的标签文件,labels/train和labels/val为空,然后运行步骤(3)的代码,运行结束转换后的标签会保存在labels/train和labels/val中,格式如下。(4)新建yolov8-obb.yaml,修改nc和scales,我使用的是yolov8n.(2)构建数据集,安装下面目录格式,其他test可为空,一定要对应。

小嘤熊的博客 2万+

JS中数组常用的方法

let arr = [1,2,3,4] 1.转字符串方法 Array.prototype.toString.call() 变成字符串 arr.join() 变字符串 2.堆栈方法 arr.push() 最后添加 返回增加后的长度 arr.pop() 删除最后一个 返回被删除的项目 arr.unshift() 在开头添加 返回增加后的长度 arr.shift() 删除第一个 返回被删除的项目 3.排序方法 arr.reverse() 翻转.........

m0_61135864的博客 846

非易失存储器读写

24C256、IIC_SCL、IIC_SDA

CT_1104的专栏 2985

华为2288H-V5服务器做raid的详细步骤

操作步骤 服务器启动界面 按del键进入设置输入密码,2288H-v5默认密码是Admin@9000 移动光标选择device manager 驱动管理选择configurationutility 配置管理 选择main menu 主菜单 选择第一个 configuration management 配置管理 选择create virtual driver 创建虚拟驱动选择select RAID level 选择RAID等级选择level-5 选择select drivers 选择驱......

weixin_46041124的博客 1万+

es6扩展运算符 [...arr]

1.数组去重 var arr = [1,2,3,4,5,2,3,1]; var set = new Set(arr); var newArr = [...set ]; //结果 [1,2,3,4,5] 2.合并数组(合并并去重) let arr1 = [1, 2, 3] let arr2 = [4, 5, 6] let arr3 = [7, 8, 9] console.log([...arr1, ...arr2, ...arr3]) //结果 [ 1, 2, 3, 4, 5, 6, 7,

WeiflR10的博客 2322

手把手教你为Multisim 14.0创建自定义元件:以SPICE模型导入为例

本文详细介绍了如何在Multisim 14.0中创建自定义元件,重点讲解了SPICE模型的导入与应用。通过系统性的步骤指南,包括元件符号设计、引脚定义、SPICE模型关联及验证测试,帮助工程师高效扩展元件库,满足特定设计需求。文章还提供了故障排除和性能优化的实用技巧,确保自定义元件在实际仿真中的可靠性。

weixin_42531163的博客 284

JavaScript三点运算符及arr对象的使用方法

代码】JavaScript三点运算符及arr对象的使用方法。

余月初贰的博客 1071

halcon 检测直线

图中后三个对象既是检测出的图像;

qq_59062726的博客 666

UART全功能测试指南:环路/DMA/RS485/硬件流控实战

UART(通用异步收发器)是嵌入式系统中最基础的串行通信接口,其核心原理基于起始位、数据位、校验位与停止位的异步帧结构,依赖精确的波特率时钟同步与采样重建机制。在工业与物联网场景中,UART不仅需保障基本通信可靠性,更需支持DMA卸载、RS485半双工自动方向控制、RTS/CTS硬件流控等进阶能力,以提升实时性、抗干扰性与系统资源效率。典型应用涵盖调试日志输出、传感器数据采集、Modbus RTU总线通信及固件空中升级。本指南聚焦UART外设测试实践,覆盖环路自检、DMA吞吐验证、RS485时序对齐、硬件流

weixin_42599908的博客 133

ES6/07/Array的扩展方法,...扩展运算符,Array.from(),(arr.find(),arr.findIndex()和arr.includes())模板字符串,Set数据结构

ES6扩展的内置对象 1,Array的扩展方法 …扩展运算符(展开语法) 1,扩展运算可以的将数组或者对象转为用逗号分隔的参数序列; let ary =[1,2,3]; //…ary;//“1”,“2”,“3” console.log(…ary);//1 2 3 console.log(1,2,3);//1 2 3 2,扩展运算符可以应用于合并数组 1,用[…array1,…array2]组成一个新数组 let ary1 =[1,2,3]; let ary2 =[4,5,6,7]; let ary3 =[…

Java_53的博客 259

YOLOv8_obb训练流程-原理解析[旋转目标检测理论篇]

本文主要介绍了YOLOv8旋转目标检测的流程,介绍了标签的解码、预测结果的解码,以及如何理解旋转角度等内容,还介绍旋转目标检测框的正样本选取及Loss计算。

ice 4731

ES6 ---数组新增东西 笔记

数组新增: 扩展运算符: ... Array.from: 作用:把类数组(获取一组元素,arguments...)对象转换成数组 具备length这个东西,就靠谱 Array.of() 把一组值,转成数组 arr.find() 查找,找出第一个符合条件的数组成员,如果没有找到,返回undefined arr.findIndex() 找的是位置,...

zxd的博客 148

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

ES6扩展运算符

ES6扩展运算符 扩展运算符:... ...:它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。 let arr = ['h','e','l','l','o']; console.log(...arr); // h e l l o 可以遍历数组,将数组的数据一一展示出来。 当然也不只是可以遍历数组 console.log(...'hello'); // h e l l o 字符串也是可以进行遍历的操作。 把字符串转化为真正的数组 console.log([...'hello']

xiaoChenPengYou的博客 302

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

ES 连接两个数组的新方法,使用es6语法 ...扩展运算符

使用es6语法的...扩展运算符 let arr1 = [1,2,3] let arr2 = [4,5,6] let arr = [...arr1,...arr2] console.log(arr) [1, 2, 3, 4, 5, 6]

桃花岛主的博客 712

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

js 三个点(...),扩展运算符说明

在开发nodejs应用时,发现一些代码中符号前面有三个点(...),这个是什么意思了。原来三个点(...)真名叫扩展运算符,是在ES6中新增加的内容,它可以在函数调用/数组构造时,将数组表达式或者string在语法层面展开;还可以在构造字面量对象时将对象表达式按照key-value的方式展开。说白了就是把外层包裹去除,不管是大括号([])、花括号({}),统统不在话下。 字面量一般指 [1,2,3,4,5] 或者 {name:'Tom',age:19} 这种简洁的构造方式,多层嵌套的数组和对象三个点就无

白袍小将的博客 1万+

数组知识

1.判断是否为数组API instanceof Array //bool 2.1将类数组转化为数组 //ES5方法 let arr=Array.prototype.slice.call(divs3) //divs3为类数组 console.log(arr) //得到数组 2.2将类数组转化为数组 //ES6方法 let arr=Array.from(divs3) console.log(arr) 3.Array.of 用法 3.1直接将参数保存为数组的内容 let arr=Array.of(3) 3.2

weixin_46424838的博客 120

JS基础之解决Math方法不能传入非数值问题

       我们知道,在ES6之前,例如:Math.min、Math.max等这些方法不能传入非数字。如果有任一参数不能被转换为数值,则会返回NaN。        如下代码,在Math.max方法中传入一个数组: var arr = [1,2,3]; va...

huangfuyk.的博客 3703

JS的五种数组合并方法

1. for 循环合拼数组 let arr1 = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; let arr2 = ["a", "b", "c", "d", "e", "f", "g"]; for (let i in arr2) { arr1.push(arr2[i]); } console.log(arr1); // 2,3,4,5,6,7,8,9,10,11,a,b,c,d,e,f,g 2. arr.concat(arr2) 会生成新的数组。 le...

d295968572的博客 1304

Array.push.apply()

我们都知道 array.push()这个方法可以在数组的末尾添加值到原数组。 但是如果我们希望两个数组相加呢? const Arr1=[1,2,3]; const Arr2=[4,5,6]; 你可能脱口而出,我Arr1.push(Arr2)不就行了吗,实际上并不是,push方法只是简单的把数组Arr2整个添加到Arr1上了。 Arr1=[1,2,3,[Arr2]] 这时候我们就要用到apply了,我们看MDN的解释 关于我们这道题,重点在于这句话 Arr1.push.app.

fang_my的博客 2331

es6 取数组的第一个和最后一个_女人心里最放不下的,是第一个男人?还是最后那个呢?...

在我们现在的生活中,那种对感情专一的人已经很少了,无论对女人还是男人来说,这个不喜欢,还有很多机会去遇到下一个人,那么今天小编想说的是,一个女人遇到过那么多的男人,在她心里最放不下的到底是哪一个?是第一个吗还是最后那个?小编呢想和大家讲2个故事!我的朋友阿红在大学的时候交了一个男朋友,觉得这辈子都想要和他在一起,除了对方以外再也爱不上任何一个人,但是因为家庭问题,没有同意家里人和他在一起,在这样的...

weixin_39577422的博客 80

push函数,将一个数组添加到另一个数组的尾部

// ES6 的写法 let arr1 = [0, 1, 2]; let arr2 = [3, 4, 5]; arr1.push(…arr2); //arr1是0,1,2,3,4,5

weixin_44371237的博客 847

Set实现数组去重

方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括 ES6 新增的数据结构 Set 和 Map)。它类似于数组,但是成员的值都是唯一的,没有重复的值。遇到字符串的,我们可以先转化成数组,数组去重比较容易,处理完之后再转化成字符串。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。//结果输出的是一个对象。split()把一个 字符串 分割成一个 数组。join()把一个 数组 分割成一个 字符串。

shi15926lei的博客 1651

Function对象中的arguments和es6的扩展运算符

arguments是function的传参的对象,是类数组。arguments有callee属性,指向当前arguments所属的function。扩展运算符:是三个点,又称‘三点运算符’。比如:Math.max()方法只接受1,2,3形式的传参方式;es5的解决方案是:Math.max().apply(Math,arr);es6中可以用扩展运算符解决:Math.max(...arr);...

qq_37344190的博客 421
上一篇: mock.js
下一篇: ES6箭头函数和普通函数下的 this 指向
Byte_Dance
博客等级 码龄9年 32粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值