当前位置: 首页 > news >正文

ES6中数组的扩展

1. 扩展运算符

用三个点(...)表示,它如同rest参数的逆运算,将数组转为用逗号分隔的参数序列。扩展就是将一个集合分成一个个的。

console.log(...[1, 2, 3]); // 1, 2, 3

可以用于函数调用

扩展运算符后还可以放置表达式

...(x > 0 ? ['a'] : [])

如果扩展运算符后是一个空数组,则不产生任何效果

[...[], 1]  // [1]

可以替代数组的apply方法

扩展运算符的应用

合并数组

ES5中使用concat方法

const arr1 = ['a', 'b'];
arr1.concat(['c']); // ['a', 'b', 'c']

ES6的合并数组

[...[1, 2, 3], ...[4, 5]]; // [1, 2, 3, 4, 5]

与解构赋值结合

用来生成数组

// ES5
a = list[0]; rest = list.slice(1);
// ES6
[a, ...rest] = list;

如果用于数组赋值,只能将其放在参数的最后一位,否则会报错。

const [...first, last] = [1, 2, 3, 4, 5]; // 报错

函数的返回值

函数只能返回一个值,如果要返回多个值,可以使用扩展运算符

字符串

将字符串转为真正的数组

[...'hello'] // ['h', 'e', 'l', 'l', 'o']

实现了Iterator接口的对象

任何Iterator接口的对象都可以用扩展运算符转为真正的数组。

Map和Set结构、Generator函数

扩展运算符内部调用的是数据结构的Iterator接口,因此只要具有Iterator接口的对

象,都可以使用扩展运算符。

2. Array.from()

将类似数组的对象、可遍历对象转为真正的数组

只要是部署了Iterator接口的数据结构,Array.from都能转为数组。

Array.from('he');
// ['h', 'e']

类似数组的对象本质就是有length属性

Array.from还可以接受第二个参数,作用类似map方法,用来对每个元素进行处理,将处理的值放入返回的数组中。

Array.from(arrayLike, x => x * x);
// 等同于
Array.from(arrayLike).map(x => x * X);

另一个应用,将字符串转为数组,返回字符串长度。


Array.from({length: 2}, () => 'jack');
// ['jack', 'jack']
// 通过length可以确定第二个参数的运行次数

3. Array.of()

将一组值转为数组

Array.of(3, 22, 3); // [3, 22, 3]

Array()的不足

Array() // []
Array(3) // [, , , ]
Array(3, 11, 8) // [3, 11, 8]

Array.of总是返回参数值组成的数组,如果没有参数就返回一个空数组。

Array.of方法可以用代码模拟

function ArrayOf() {return [].slice.call(arguments);
}

4. 数组实例的copyWithin()

会在当前数组内部将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组,也就是说,使用这个方法会修改当前的数组。

3个参数

  • target(必选),从该位置开始替换数据
  • start(可选), 从该位置开始读取数据,默认为0,如果是负数,表示倒数。
  • end(可选), 到该位置停止读取,默认数组的长度,如果是负数,表示倒数。
[1, 2, 3, 4, 5].copyWithin(0, 3);
// [4, 5, 3, 4, 5]

表示从下标为3的位置开始复制到数组末尾的数据,在下标为0的位置开始换数据。

对于没有copyWithin方法可以使用以下代码

[].copyWithin.call(new Int32Array([1, 2, 3, 4, 5]), 0, 3, 4);// Int32Array [4, 2, 3, 4, 5]

5. 数组实例的find()和findIndex()

  • find

find方法用于找出第一个符合条件的数组成员,参数是一个回调数,所有成员都会依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员。如果没有符合的,返回undefined。

[1, 2, -5, 10].find((value, index, arr) => {return value > 0
})
// -5

上面的代码找出小于0的成员。

回调函数可以接受3个参数,依次是当前的值、当前的index以及原数组。

  • findIndex

findIndex返回第一个符合条件的数组成员的位置,如果都不符合,返回-1。

第一个参数是回调函数,第二个参数可选,绑定this对象。

6. 数组实例的fill()

给定值填充一个数组。

['a', 'b', 'c'].fill(7); // [7, 7, 7]

特别适合空数组的初始化。

还可以接受第二个和第三个参数,用来指定填充的起始位置和结束位置。

['a', 'b', 'c'].fill(7, 1, 2);
// ['a', 7, 'c']

上面的代码表示,fill方法从1号位开始向原数组填充7,到2号位之前结束。

7. 数组实例的entries()、keys()和values()

用来遍历数组,可用于for…of循环遍历。

分别是遍历键值对、键、值

for(let index of ['a', 'b'].keys()) {// code
}

8. 数组实例的includes()

方法返回一个布尔值,表示某个数组是否包含给定的值,与字符串中的includes类似。

2个参数

  • 第一个:要检测的值
  • 第二个:开始搜索的位置,默认0。负数表示倒数,负数大于数组长度时,会重置为0
[1, 2, 3].includes(3, 3); // false

indexOf缺点

  • 不够语气化,其含义是找到参数值第一个出现的位置,所以要比较是否不等于-1, 表达起来不直观。
  • 内部使用严格相等运算符(===),会导致对NaN误判。

NaN和自身都不相等。

代替模拟代码

const contains = (() => {Array.prototype.includes ? (arr, value) => arr.includes(value) : (arr, value) => arr.some(el => el === value);
})

Map结构中的has方法是用来查找键名的

Set结构中的has方法用来查找值的

9. 数组的空位

Array当参数为一个值是,则代表生成length为该值的空数组。

Array(3); // [, , ,]

在ES5中对空位处理很不一致

  • forEach()、filter()、every()和some()都会跳过空位
  • map()会跳过空位,但会保留这个值
  • join()和toString()会将空位视为undefined,而undefined和null会被理解成空字符串。

在ES6中明确规定空位转为undefined

Array.from方法会将数组的空位转为undefined。

扩展运算符也会转为undefined

copyWithin方法会连空位一起复制

fill方法会将空位视为正常的数组位置

for…of 循环也会遍历空位

entries()、keys()、values()、find()和findIndex()会将空位转为undefined

相关文章:

ES6中数组的扩展

1. 扩展运算符 用三个点(...)表示,它如同rest参数的逆运算,将数组转为用逗号分隔的参数序列。扩展就是将一个集合分成一个个的。 console.log(...[1, 2, 3]); // 1, 2, 3可以用于函数调用 扩展运算符后还可以放置表达式 ...(x > 0 ? [a] : [])如…...

计算机考研 | 2016年 | 计算机组成原理真题

文章目录 【计算机组成原理2016年真题44题-9分】【第一步:信息提取】【第二步:具体解答】 【计算机组成原理2016年真题45题-14分】【第一步:信息提取】【第二步:具体解答】 【计算机组成原理2016年真题44题-9分】 假定CPU主频为5…...

Web版Photoshop来了,用到了哪些前端技术?

经过 Adobe 工程师多年来的努力,并与 Chrome 等浏览器供应商密切合作,通过 WebAssembly Emscripten、Web Components Lit、Service Workers Workbox 和新的 Web API 的支持,终于在近期推出了 Web 版 Photoshop(photoshop.adobe…...

FL Studio21.1.0水果中文官方网站

FL Studio 21.1.0官方中文版重磅发布纯正简体中文支持,更快捷的音频剪辑及素材管理器,多样主题随心换!Mac版新增对苹果M2/1家族芯片原生支持。DAW界萌神!极富二次元造型的水果娘FL chan通过FL插件Fruity Dance登场,为其…...

[BJDCTF2020]Mark loves cat

先用dirsearch扫一下,访问一下没有什么 需要设置线程 dirsearch -u http://8996e81f-a75c-4180-b0ad-226d97ba61b2.node4.buuoj.cn:81/ --timeout2 -t 1 -x 400,403,404,500,503,429使用githack python2 GitHack.py http://8996e81f-a75c-4180-b0ad-226d97ba61b2.…...

@SpringBootApplication注解的理解——如何排除自动装配 分布式情况下如何自动加载 nacos是怎么被发现的

前言 spring作为主流的 Java Web 开发的开源框架,是Java 世界最为成功的框架,持续不断深入认识spring框架是Java程序员不变的追求。 本篇博客介绍SpringBootApplicant注解的自动加载相关内容 其他相关的Spring博客文章列表如下: Spring基…...

HTTP的前世今生

史前时期 20 世纪 60 年代,美国国防部高等研究计划署(ARPA)建立了 ARPA 网,它有四个分布在各地的节点,被认为是如今互联网的“始祖”。 然后在 70 年代,基于对 ARPA 网的实践和思考,研究人员发…...

软件测试教程 自动化测试selenium篇(二)

掌握Selenium常用的API的使用 目录 一、webdriver API 1.1元素的定位 1.2 id定位 1.3name 定位 1.4tag name 定位和class name 定位 1.5CSS 定位 1.6XPath 定位 1.7link text定位 1.8Partial link text 定位 二、操作测试对象 2.1鼠标点击与键盘输入 2.2submit 提交…...

JavaSE入门--初始Java

文章目录 Java语言概述认识Java的main函数main函数示例运行Java程序认识注释认识标识符认识关键字 前言: 我从今天开始步入Java的学习,希望自己的博客可以带动小白学习,也能获得大佬的指点,日后能互相学习进步,都能如尝…...

leetcode做题笔记160. 相交链表

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意,函数返回结果后&…...

数学建模Matlab之检验与相关性分析

只要做C题基本上都会用到相关性分析、一般性检验等! 回归模型性能检验 下面讲一下回归模型的性能评估指标,用来衡量模型预测的准确性。下面是每个指标的简单解释以及它们的应用情境: 1. MAPE (平均绝对百分比误差) 描述: 衡量模型预测的相对…...

微服务网关:Spring Cloud Zuul 升级 Spring Cloud Gateway 的核心要点

1. 服务路由 1.1. Zuul 接收请求: 在routes路由规则中,根据path去匹配,如果匹配中,就使用对应的路由规则进行请求转发如果无法从routes中匹配,则根据path用“/”去截取第一段作为服务名进行请求转发,转发…...

视频讲解|含可再生能源的热电联供型微网经济运行优化(含确定性和源荷随机两部分代码)

1 主要内容 该视频为《含可再生能源的热电联供型微网经济运行优化》代码讲解内容,对应的资源下载链接为考虑源荷不确定性的热电联供微网优化-王锐matlab(含视频讲解),对该程序进行了详尽的讲解,基本做到句句分析和讲解…...

3种等待方式,让你学会Selenium设置自动化等待测试脚本!

一、Selenium脚本为什么要设置等待方式?——即他的应用背景到底是什么 应用Selenium时,浏览器加载过程中无法立即显示对应的页面元素从而无法进行元素操作,需设置一定的等待时间去等待元素的出现。(简单来说,就是设置…...

[Spring] Spring5——AOP 简介

目录 一、AOP 简介 1、什么是 AOP 二、AOP 底层原理 1、动态代理原理 2、基于接口的 JDK 动态代理 3、基于继承的 CGLib 动态代理 三、底层原理实现—— JDK 动态代理 1、使用 Proxy 类的方法创建代理对象 2、JDK 动态代理示例 四、AOP 操作术语 1、连接点 2、切入…...

C/C++ 动态规划面试算法题

1.买卖股票的最佳时机 https://blog.csdn.net/qq_41277628/article/details/113322136 输入:[7,1,5,3,6,4] 输出:5 解释:在第 2 天(股票价格 1)的时候买入,在第 5 天(股票价格 6&#xff…...

kafka伪集群部署,使用zookeeper模式

1:拉去管理kafka界面UI镜像 docker pull provectuslabs/kafka-ui2:拉去管理kafka镜像 docker pull bitnami/kafka3:docker-compose.yml version: 3.8 services:zookeeper-1:container_name: zookeeper1image: bitnami/zookeeperports:- "2181:2181"environment:- …...

Postgresql 主从复制+主从切换(流复制)

pgsql有多种主从复制方式,推荐的是流复制 一、前置条件 1.至少两个pgsql数据库(可以是一台设备上的两个) 可以参考下面的教程 pgsql编译安装:pgsql 编译安装(linux) pgsql单机多开:pgsql 单机…...

java获取字符串集合中每个字符并且组成一个新的集合实现

直接怼代码&#xff0c;刚好碰到了这种需求&#xff0c;也是想了可久&#xff0c;其实想想也还是挺简单的 public static void main(String[] args) { // 原始字符串集合 List<String> originalList new ArrayList<>(); originalList.add("Hello"); …...

结构型设计模式——外观模式

摘要 本文主要分析设计模式 - 结构型 - 外观(Facade)&#xff0c;它提供了一个统一的接口&#xff0c;用来访问子系统中的一群接口&#xff0c;从而让子系统更容易使用。 一、外观模式的意图 提供了一个统一的接口&#xff0c;用来访问子系统中的一群接口&#xff0c;从而让…...

长期使用Taotoken Token Plan套餐在项目开发中的成本节省感受

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 长期使用Taotoken Token Plan套餐在项目开发中的成本节省感受 1. 项目背景与计费模式选择 我们团队负责一个中型规模的AI应用项目…...

C# Winform高效分页实践:SunnyUI uiPagination控件详解与数据绑定

1. 初识SunnyUI uiPagination控件 第一次接触SunnyUI的uiPagination控件是在开发一个订单管理系统时。当时客户抱怨系统加载5000多条记录时会卡顿近10秒&#xff0c;我试过各种传统分页方案都不够理想&#xff0c;直到发现了这个宝藏控件。它就像Winform界的"瑞士军刀&quo…...

网盘下载革命:LinkSwift 如何让你在9大平台轻松获取真实下载地址

网盘下载革命&#xff1a;LinkSwift 如何让你在9大平台轻松获取真实下载地址 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云…...

ClawSuite:模块化网络安全工具集的设计原理与实战应用

1. 项目概述&#xff1a;ClawSuite&#xff0c;一个被低估的网络安全工具集如果你在网络安全领域摸爬滚打过几年&#xff0c;尤其是做过渗透测试或者红队评估&#xff0c;那你肯定对Metasploit、Nmap、Burp Suite这些名字如数家珍。但今天我想聊一个在GitHub上相对低调&#xf…...

别再死磕ViT了!用Swin-Transformer搞定高分辨率图像识别,保姆级原理拆解

高分辨率图像识别新范式&#xff1a;Swin-Transformer实战指南 当计算机视觉工程师面对4K医学影像或卫星地图时&#xff0c;传统ViT模型往往会遭遇显存爆炸的尴尬。我曾在一个遥感项目中发现&#xff0c;直接将ViT应用于20482048像素的图像&#xff0c;单次前向传播就消耗了32G…...

从原理图到PCB:手把手教你搞定PCIE X4接口的完整电路设计(附时钟、电源、热插拔信号详解)

从原理图到PCB&#xff1a;手把手教你搞定PCIE X4接口的完整电路设计 在高速数字电路设计中&#xff0c;PCIE接口因其出色的带宽和稳定性&#xff0c;已成为现代计算机系统中不可或缺的组成部分。无论是主板设计、显卡开发还是各类扩展卡&#xff0c;PCIE接口的正确实现直接关…...

卡尔曼滤波中的‘信任度’分配:从高斯分布乘积公式看估计与观测谁更重要

卡尔曼滤波中的‘信任度’分配&#xff1a;从高斯分布乘积公式看估计与观测谁更重要 在机器人定位或金融时间序列预测中&#xff0c;我们常常面临一个核心问题&#xff1a;当预测值和观测值都存在不确定性时&#xff0c;如何决定更信任哪一个&#xff1f;这不仅仅是数学问题&a…...

构建自动化编译系统:Makefile递归遍历与智能目录生成实践

1. 为什么需要自动化编译系统 如果你曾经维护过一个包含几十个源文件的中大型C/C项目&#xff0c;肯定经历过这样的痛苦&#xff1a;每次新增一个源文件&#xff0c;都要手动修改Makefile&#xff1b;项目结构调整时&#xff0c;编译规则需要全部重写&#xff1b;不同模块之间的…...

让你的自定义结构体也能被qDebug优雅打印:Qt运算符重载的妙用与避坑指南

让自定义结构体与qDebug完美融合&#xff1a;Qt运算符重载实战解析 在Qt开发中&#xff0c;调试信息输出是日常开发不可或缺的环节。当项目规模扩大&#xff0c;自定义数据结构变得复杂时&#xff0c;如何优雅地输出这些结构体的调试信息就成了开发者面临的现实挑战。本文将深入…...

Vivado里FIFO IP核的Standard和FWFT模式到底怎么选?一个波形对比就懂了

Vivado中FIFO IP核模式选择&#xff1a;Standard与FWFT的深度解析与实战指南 在FPGA开发中&#xff0c;数据缓冲是几乎所有高速数据处理系统不可或缺的一环。作为Xilinx工具链中的核心IP之一&#xff0c;FIFO Generator提供了灵活的数据缓冲解决方案。但当面对Standard FIFO和F…...