Array.from详解

news2024/9/20 18:51:22

@德玛玩前端
2023-07-07

在以往的开发中,对于Array.from的了解是from是Array的静态方法,可以将类数组和迭代对象转换为数组,可以结合Set集合快速实现数组的去重,一直以为Array,from()只有一个参数,不是传类数组就是可迭代对象,但是,今天,在阅读他人写的node项目时,出现了以下代码。
在这里插入图片描述
我当时真的是蒙蔽的,因为在我的认知中,这个方法应该不会出现第二个参数😵😵😵😵😵😵。

在这里插入图片描述
所以,我花了些许的时间,专门对这个静态方法做了整理(也不知道详不详细,如有遗漏,欢迎各位大神和同行们指教😘😘😘)。并将学习的成果记录如下,和大家分享ヾ(≧▽≦*)o:

Array.from()

Array.from(arrayLike,Function,thisObj)

  • arrayLike 必传参数,想要转换成数组的数组,类数组或可迭代对象
  • Function 可选参数,Function(item,value){…}是在集合中每个元素上调用的函数。返回的值将插入到新集合中
  • thisArg 可选参数,执行回调函数Function时this对象,这个参数很少使用

用途1:把类数组转换成数组

类数组一般是 dom集合或者arguments关键字等

示例

将arguments关键字转换为数组,使用数组原型对象上的reduce方法

function sum(){
	return Array.from(arguments).reduce((sum,val)=>sum+val)
} 
sum(1,2,3) //6

用途2.可迭代对象转换为数组

示例1:字符串转换成数组

Array.from('dema') //['d', 'e', 'm', 'a']
//api实现效果同'dema'.split('') //['d', 'e', 'm', 'a']

示例2:集合转换成数组

Array.from(new Set([1,2])) //[1,2]

示例3:映射转数组

const map = new Map();
map.set('orgId_1', 1);
map.set('orgId_2', 2);
Array.from(map) //[ ['one', 1] , ['two', 2]]
// api实现效果同打散映射 ...map

用途3.克隆数组

浅拷贝

const arr=[1,2,3]
const arrCopy=Array.from(arr)
console.log(arr===arrCopy) //false

利用递归进行深拷贝

function deepCopy(val){
	return Array.isArray(val)?Array.from(val,deepCopy):val
}
const arr=[[1,2,3],['dongdong','haohao','haha']]
const arrCopy = deepCopy(arr);
console.log(arr[0]===arrCopy[0]) //false

用途4.使用值填充数组

创建一个填充相同默认值的数组,传入一个类数组对象 { length } 和 返回初始化值的 Function 函数。

const length =3
const init=0
const result=Array.from({length},()=>init)
console.log(result) //[0, 0, 0]
// result就是一个长度为3的新数组
// 实现效果类似于 new Array(3).fill(0)

用途5.使用不同的空对象填充数组

数组中的每一个对象都是一个新对象

const length=3
const resultA=Array.from({length},()=>({}))
const resultB=Array(length).fill({})
console.log(resultA) // [{},{},{}]
console.log(resultB) // [{},{},{}]

可以看出,由Array.from创建数组中的对象不是一个对象,而Array.fill()创建数组中的对象是同一个对象

console.log(resultA[0]===resultA[1]) //false
console.log(resultB[0]===resultB[1])  //true

下一个用途终于解答了我的疑惑😁😁😁😁😁
在这里插入图片描述

用途6.生成数字范围

可以用Array.from()生成值的范围

function range(end){
	var wd="a"
	return Array.from({length:10},(_,i)=>`${wd}${i+1}`)
}
range(4) 
// ['a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'a10']

用途7.数组去重

Array.from可结合Set集合实现数组的快速去重

function arr(array){
	return Array.from(new Set(array))
}
arr([1,2,2,2,3,4,5]) //[1, 2, 3, 4, 5]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/729687.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

idea打包项目时报错 There are test failures

出现这个错误时要点击跳过测试类的按钮,图中的这个圆圈,可以看到test已经被划掉了 再点击package打包,成功。

启航RK3588边缘计算之旅:保定飞凌OK3588开发板

启航RK3588边缘计算之旅:保定飞凌OK3588开发板 引言: 随着人工智能技术的飞速发展,人们对于能够提供高性能和灵活性的智能设备有着极大的需求。作为人工智能领域的先锋企业,保定飞凌公司在设计和生产高性能处理器方面取得了卓越的…

在服务器从零开始配置conda、pytorch、cv2

疯掉了 希望是最后一次 0.配置WinSCP和PUTTY 在Windows上使用PuTTY进行SSH连接-腾讯云开发者社区-腾讯云 1.配置conda 如何在Linux服务器上安装Anaconda(超详细)_linux安装anaconda_流年若逝的博客-CSDN博客 实验室远程登录Linux服务器并配置环境_远…

Linux性能优化实践——平均负载

平均负载(Load Average) 当我们输入uptime命令时, 这里有几个参数,解释如下 0:54 :当前时间;up 50 mins:系统运行时间;2 users:正在登录用户数;load avera…

活动回顾| 萌啦科技亮相第三届东南亚大会,用数据赋能助力东南亚出海新机遇!

“聚焦深耕”资源对接 6月30日,由DNY123东南亚卖家导航主办的聚焦深耕——第三届东南亚电商本地化&品牌资源对接会在深圳圆满结束。 本次对接会以"聚焦深耕"为主题,旨在推动东南亚电商业务的本地化发展,并促进品牌资源的互通与…

考研的尽头是考公?

2022年12月23日,作为中国诞生于互联网的职业考试培训行业市场领导者的粉笔有限公司(“粉笔”或“公司”) ,早前通过港交所上次聆讯后开始招股。 据悉,粉笔计划发售20,000,000股股份(…

win系统删除oracle数据文件恢复---惜分飞

有客户联系我们,说win平台下的数据库,在由于空间紧张,在关闭数据库的情况下删除的两个数据文件,导致数据库无法正常访问很多业务表,需要对其进行恢复,查看alert日志发现大概操作,删除文件之后,启动数据库失败 Completed: alter database mount exclusive alter database open E…

十八、Jenkins(centos7)执行接口自动化测试脚本,飞书推送测试结果消息

十八、Jenkins(centos7)执行接口自动化测试脚本,飞书推送测试结果消息 1.创建 Freestyle project 项目 2. 输入git仓库地址 https://gitee.com/HP_mojin/pytest_allure_request_20220811 3. 增加构建步骤-Execute shell(Jenkins…

TiDB架构中有多少个模块?核心的组件是哪个?

TiDB 集群主要包括三个核心组件:TiDB Server,PD Server 和 TiKV Server。此外,还有用于解决用户复杂 OLAP 需求的 TiSpark 组件和简化云上部署管理的 TiDB Operator 组件。 TiDB架构图解 1. TiDB Server TiDB Server 负责接收 SQL 请求&…

【数据结构导论】第 4 章:树和二叉树

目录 一、树的基本概念 (1)树的定义 (2)树的逻辑表示 (3)树的相关术语 (4)树的基本运算 二、二叉树 (1)二叉树的基本概念 ① 定义 ② 特点 ③ 二叉…

【玩转 Cloud Studio】- 云编程之旅

Cloud Studio介绍 Cloud Studio 是基于浏览器的集成式开发环境(IDE),为开发者提供稳定的云端工作站。在使用 Cloud Studio 时无需安装,打开浏览器即可快速启动项目。底层资源自动弹性扩缩,极大地节省成本,…

【课程总结】2023中科大-数字图像分析-期末考试试卷回忆版及往年考题汇总

2023中科大-数字图像分析-期末考试试卷回忆版及汇总 写在前面:一,2023-2024春 期末考试题目回忆二,往年考试题目回忆2.1 2017-2018秋2.2 2018-2019秋2.3 2018-2019 春2.4 2019-2020 秋2.5 2019-2020 春2.6 2020-2021 秋2.7 2021-2022 春2.8 2…

物联网会是下一个支柱产业吗?

近年来,物联网 (IoT) 无疑已成为一个重要且快速增长的行业。尽管绝对确定地预测未来具有挑战性,但许多专家和分析师认为,物联网有潜力成为支柱产业,对各个行业产生变革性影响。 物联网是指由可以收集、交换和分析数据的互连设备、…

Python学习笔记(十八)————python包相关

目录 (1)python包作用 (2)自定义python包 (3)导入自定义包 方式一: 方式二: (4)导入第三方包 ①pip安装 ②PyCharm安装 (1)pytho…

【数据挖掘】推荐系统(二):基于内容的推荐

五、基于内容的系统 5.1 基本原理 基于内容的系统根据用户偏好和配置文件生成建议。他们尝试将用户与他们以前喜欢的项目相匹配。项目之间的相似程度通常根据用户喜欢的项目的属性来确定。与大多数利用目标用户和其他用户之间的评级的协作过滤模型不同,基于内容的模…

设计模式之模板方法实现抽奖功能

1.项目背景 接到一个需求,实现电商营销模块的圆盘抽奖功能。如果大家有关注市面上的抽奖,大致也是圆盘抽奖、九宫格抽奖,随机抽球等等。尤其是电商行业,会有各种各样的活动,因此也会出现各式各样的抽奖,那…

【InnoDB 存储引擎】15.7.1 InnoDB Locking(锁实验,重要)

文章目录 1 关于 Record Lock 的实验1.1 实验 1:没有主键时的如何锁定1.2 实验 1(续):带着问题继续实验1.3 实验 2:有主键时如何锁定 2 关于 Next-Key Lock 的实验2.1 实验 3:如何确定算法的锁定范围2.2 实…

HTML期末作业-精仿故宫模板(HTML+CSS+JavaScript)

期末作业完成!我仿了故宫官网,老师给了90分。现在分享给大家! 首页包含功能: 轮播图:在首页顶部设置一个可自动轮播的图片展示区域,展示多张宣传图片或产品图片,提升页面的视觉效果和吸引力。…

从0训练一个神经网络分类器

从0训练一个神经网络分类器 0. 关于数据? 训练一个图像分类器1. 使用torchvision可以非常容易地加载CIFAR10。2. 定义一个卷积神经网络3. 定义损失函数和优化器4. 训练网路5. 在测试集上测试网络6. 检测网络在整个测试集上的结果如何。7. 在识别哪一个类的时候好&am…

MySQL基操例题

Ⅰ创建数据库使用create语句: create database 数据库名; Ⅱ创建表同理: create table if not exists 表名 ( 字段名 数据类型 主键 约束, 字段名 数据类型 主键 约束) 设置存储引擎和字符集; …