ES6新标准下关于数组的几个实用改进功能介绍

ES5中对数组的操作方法还不完善,对于一些其他语言较常见的功能还需要用间接的方法去实现,因而在ES6有力的进行了改进,主要有以下几个方面:

一、创建数组上的改进

在ES5及以前,创建数组的方式有两种,一种是调用Array构造函数,另一种是用数组字面量方式。这两种方法,均需列举数组中的元素,功能受限。例如想将一个类数组对象转换为数组,可选的方法有限,需要编写额外的代码。但在ES6中,这种转换将非常方便。

(一)Array.of()方法

1.ES5的构造函数方法会造成模糊结果

let item1=new Array(2);//当只传入一个数字时,会被当作是数组长度,而不会当作元素,除非传入的是"2"字符

console.log(item1.length);//输出结果:2

console.log(item10);//输出结果:undefined

console.log(item11);//输出结果:undefined

let item2=new Array("2");//当只传入字符"2"时,则会当作元素

console.log(item2.length);//输出结果:1

console.log(item20);//输出结果:2

console.log(item21);//输出结果:undefined

let item3=new Array(2,3);//而当只传入两个以上数字或字符时,则会被当作元素

console.log(item3.length);//输出结果:2

console.log(item30);//输出结果:2

console.log(item31);//输出结果:3

2.Array.of()方法用于解决构造函数造成模糊问题

Array.of()方法,不管传入什么参数,都自动当作元素,没有单一数值当作定义数组长度问题

let items= Array.of(2)

console.log(items.length);//输出结果:1

console.log(items0);//输出结果:2

console.log(items1);//输出结果:undefined

(二)Array.from()方法

Array.from()用于将非数组对象和可迭代对象转换为数组。

1. Array.from()方法将非数组对象转换为数组

如函数的arguments就是一种类数组对象,在ES5中要将其转换为数组,要采用间接方法得到,方法如下:

function makeArray(arrayLike){//间接方法得取得数组,再将数组返回进行复制

var result=\[\];

for(var i=0;i<arrayLike.length;i++){

result.push(arrayLikei);

}

return result;

}

function doSomeThing(par1,par2,par3){//通过调用间接方法,得到该函数的参数数组

var args=makeArray(arguments);

console.log(args);

}

doSomeThing(34,45,23);//输出结果:34,45,23

而在ES6中,只需要Array.from()方一条语句即可实现:

function doSomeThing(par1,par2,par3){//通过一条语句,得到该函数的参数数组

var args=Array.from(arguments);

console.log(args);

}

doSomeThing(34,45,23);//输出结果:34,45,23

2.Array.from()方法的映射转换

Array.from()还可以对转换的数组进行进一步运算加工,其方法是提供一个映射函数作为Array.from()方法的第二个参数。

function translate(){

return Array.from(arguments,value=>value+1);

}

let numbers=translate(1,2,3);

console.log(numbers);//输出结果:2,3,4

如果用映射函数处理对象加工,也可以给Array.form()方法传入第三个参数,表示映射函数的this值,如下。

let helper={

diff:1,

add(value){

return value+this.diff;

}

};

function translate(){

return Array.from(arguments,helper.add,helper);

}

let numbers=translate(1,2,3);

console.log(numbers);//输出结果:2,3,4

2.Array.from()方法将可迭代对象转换为数组

let numbers={

*Symbol.iterator(){//创建可迭代对象

yield 1;

yield 2;

yield 3;

}

};

let number2=Array.from(numbers,value=>value+1);

console.log(number2);//输出结果:2,3,4

二、为数组添加的新方法

主要有四个新方法,find()方法和findIndex()方法可以用于在数组中查找任意值,解决了ES5中只能通过遍历来查找序号及值;fill()方法和copyWithin()方法主要用来对数组进行分解式的复制。

(一) find()方法和findIndex()方法

find()方法和findIndex()方法这两个方法是对ES5中的indexOf()和lastIndexOf()两个方法,进行了扩展,加入了回调函数功能,可以实现更为复杂的查找功能。indexOf()和lastIndexOf()虽然可以查找特定的值,但每次只能查找一个值相等式匹配,对于有复杂的条件匹配,如查找大于35的偶数值,就无法用一条语句实现,还需要编写更多赋值判断代码才完成。而ES6中的find()方法和findIndex()方法则可轻松实现。

find()方法和findIndex()方法都接受两个参数,一个是回调函数,另一个是可选参数,用于指定回调函数中的this值。两者的区别是,find()方法返回查找到的值,findIndex()方法返回的是值的索引。这四个搜索函数都一样,当查找到第一个匹配条件时,立即停止搜索剩余部分。

let numbers=25,30,35,40,45;

console.log(numbers.find(n=>n>33));//输出结果:35

console.log(numbers.findIndex(n=>n>33));//输出结果:2

(二) fill()方法和copyWithin()方法

1.fill()方法

fill()方法用于向数组中填充指定的值,当传入一个值时,它会重写数组中所有的值。

let numbers=25,30,35,40,45;

numbers.fill(0);

console.log(numbers);//输出结果:0,0,0,0,0

如果只想改变某一部分的值,可以传入开始索引和不包含结束索引(不包括结束索引当前值)这两个参数,如下:

let numbers=1,2,3,4;

numbers.fill(1,2);//从第2序号开始后所有元素传入1进行覆盖

console.log(numbers);//输出结果:1,2,1,1

let numbers1=1,2,3,4;

numbers1.fill(0,1,3);//从第1序号开始到3序号(不包含3序号)传入0进行覆盖

console.log(numbers1);//输出结果:1,0,0,4

2.copyWithin()方法

copyWithin()方法用于从数组中复制元素的值,并粘贴到该数值指定位置进行覆盖。它有两个参数,一个是开始填充值的索引位置,另一个是开始复制值的索引位置。

let numbers=1,2,3,4;

numbers.copyWithin(2,0);//从数组的0序号开始复制值,到2序号开始进行粘贴覆盖

console.log(numbers);//输出结果:1,2,1,2

let numbers1=1,2,3,4;

numbers1.copyWithin(2,0,1);//从数组0序号开始复制值,到1序号停止复制值,然后粘贴到2序号开始进行覆盖

console.log(numbers1);//输出结果:1,2,1,4

相关推荐
Lorin 洛林1 小时前
一文读懂 Agent Skills
前端·网络
newbe365242 小时前
我们如何使用 impeccable 优化前端界面设计与实现稳定性
前端·人工智能·分布式·github·aigc·wpf
KaMeidebaby9 小时前
卡梅德生物技术快报|蛋白 N 端测序在重组贻贝融合蛋白表征中的应用,解决原核表达序列偏移工艺难题
前端·人工智能·物联网·算法·百度
kyriewen10 小时前
我筛了 1400 个 Claude Code Skills,留下 5 个天天在用的
前端·ai编程·claude
JNX_SEMI10 小时前
AT2401C 2.4GHz 全集成射频前端单芯片技术解析
前端·单片机·嵌入式硬件·物联网·硬件工程
anOnion11 小时前
Agentic 前端开发之 实时显示 AI Agent 终端输出
前端·javascript·人工智能
随风一样自由11 小时前
【前端领域】2026最新前端领域全梳理(框架/工具/AI/跨端/底层标准/就业趋势)
前端·人工智能·前端框架
这是个栗子11 小时前
【前端性能优化】优化数据加载:用 Promise.all 从串行到并行
前端·javascript·性能优化·异步编程·前端优化·promise.all
fei_sun11 小时前
黑洞路由(Null Route/空接口路由)
服务器·前端·javascript
大爱一家盟12 小时前
告别卡点BGM同质化 2026原创卡点音乐素材下载网站 TOP5 推荐
大数据·前端·人工智能