Javascript学习之路:Array.from详解

Array.from是一个静态方法,用于将类数组或可迭代对象转换为数组。它接受两个可选参数,一个函数和一个this对象。文章通过多个示例展示了Array.from在处理arguments、字符串、集合、映射、数组克隆、填充数组、生成数字范围和数组去重等场景的应用。此外,还揭示了Array.from与Array.fill创建对象的不同之处。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@德玛玩前端
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]

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值