ES6向阵列中添加了一些新功能,到目前为止,这些新功能可以应用到他们自己的业务层。在这一部分,我们将总结ES6为阵列提供一些新功能的用法。
ES6(ECMAScript 6)是即将发布的新JavaScript语言的标准,代号harmony(意思是和谐,明显跟不上我们国家的步伐,我们已经进入了中国梦版本)。上一次制定标准是2009年发布的ES5。目前ES6的标准化工作正在进行中,预计14年12月正式定型版本发布。然而,大部分标准已经到位,各种浏览器对ES6的支持正在实现。
ES6向阵列中添加了一些新功能,到目前为止,这些新功能可以应用到他们自己的业务层。在这一部分,我们将总结ES6为阵列提供一些新功能的用法。
ES6提供的两个静态方法:
数组. from
数组. of
ES6提供操作、填充和过滤数组的方法:
数组.原型.复制宽度
数组.原型.填充
数组.原型.查找
array . prototype . find索引
ES6中有关于数组迭代的方法:
数组.原型.密钥
数组.原型.值
数组.原型.条目
array . prototype[symbol . iterator]
接下来,我们主要来看看这些方法的使用。
数组. from()
Array.from()方法主要用于将两种类对象(类数组对象[类数组对象]和遍历对象[iterable])转换为实数组。
在ES5中,通常使用下面的方法将类似数组的对象转换成数组:
函数转换(){
返回Array.prototype.slice.call(参数);
}
cast('a ',' b ',' c ',' d ');//['a ',' b ',' c ',' d']
或者也可以写成:
函数转换(){
return[]slice . call(参数);
}
cast('a ',' b ',' c ',' d ');//['a ',' b ',' c ',' d']
在ES6中,可以使用Array.from将类似数组的对象转换为真实的数组。
所谓的类数组对象只有一个本质特征,那就是必须有length属性。因此,任何具有length属性的对象都类似于一个array对象,可以通过Array.from方法转换为一个真实的数组。
让arrayLike={
0': 'a ',
1': 'b ',
2': 'c ',
长度:3
}
console . log(array . from(arrayLike));//['a ',' b ',' c']
在ES6中,扩展操作符(.)也可以把一些数据结构变成数组。只是它需要调用遍历接口Symbol.iterator。
函数转换(){
返回[.参数]
}
cast('a ',' b ',' c ')。//['a ',' b ',' c']
值得注意的是,如果一个对象没有配备遍历接口,那么使用扩展操作符是无法将类似数组的对象转换成数组的。
Array.from接受三个参数,但只需要输入:
输入:要转换的类似数组对象和遍历对象。
Map:类似于数组的map方法,用于处理每个元素,并将处理后的值放入返回的数组中。
上下文:这用于绑定映射
只要是部署了迭代器接口的数据结构,Array.from就可以把它变成数组:
让arr=Array.from('w3cplus.com ')
console . log(arr);//['w ',' 3 ',' c ',' p ',' l ',' u ',' s ','.',' c ',' o ',' m']
let namesSet=新集合(['a ',' b'])
设arr 2=array . from(name set)
console . log(arr 2);//['a ',' b']
上面的代码,因为字符Lu和Set结构有迭代器接口,可以通过Array.from转换成实数组如果参数是实数组,Array.from也会返回一个完全相同的新数组:
设arr=Array.from([1,2,3]);
console . log(arr);//[1,2,3]
如前所述,Array.from还可以接受第二个参数,该参数的作用类似于数组的map方法,用于处理每个元素,处理后的值被放入返回的数组中:
Array.from(arrayLike,x=x * x);
//相当于
Array.from(arrayLike)。map(x=x * x);
Array.from([1,2,3],(x)=x * x)
//[1, 4, 9]
如果在map函数中使用了这个关键字,还可以传入Array.from的第三个参数来绑定它。
Array.from()可以把各种值变成实数组,还提供了map函数。其实这就意味着只要有一个原始的数据结构,你就可以先处理它的值,然后转换成标准的数组结构,然后就可以使用大量的数组方法了。
Array.from({ length: 2 },()='jack ')
//['杰克','杰克']
在上面的代码中,Array.from的第一个参数指定第二个参数运行的次数。这个特性可以使这种方法的使用非常灵活。
Array.from()的另一个应用是将字符串转换成数组,然后返回字符串的长度。因为可以正确处理各种Unicode字符,所以可以避免JavaScript把大于\ ufff的Unicode字符算作两个字符的bug。
函数countSymbols(字符串){
返回Array.from(字符串)。长度;
}
还可以使用Array.from()返回各种数据类型:
函数类型Of () {
返回Array.from(arguments,value=typeof value)
}
typesOf(null,[],NaN)
//- ['object ',' object ',' number']
您也可以使用map方法来实现上面代码的功能:
函数类型Of(.所有){
return all . map(value=type of value)
}
typesOf(null,[],NaN)
//- ['object ',' object ',' number']
数组. of
使用Array.of方法将一组值转换为数组。
Array.of=函数的(){
返回Array.prototype.slice.call(参数)
}
但是不能用Array.of代替Array.prototype.slice.call它们的行为是不同的:
Array.prototype.slice.call([1,2,3])
//- [1, 2, 3]
(1,2,3)的数组
//- [1, 2, 3]
(3)的数组
//- [1]
该方法的主要目的是弥补数组构造函数Array()的不足,因为参数个数的不同会导致Array()的不同行为:
新数组()
//- []
新数组(未定义)
//-[未定义]
新数组(1)
//-[未定义的x 1]
新数组(3)
//-[未定义的x ^ 3]
新数组(1,2)
//- [1, 2]
新数组(-1)
//- RangeError:无效的数组长度
Array.of基本上可以代替Array()或new Array()使用,不会因为参数不同而出现重载,它们的行为非常统一:
的数组()
//- []
数组. of(未定义)
//-[未定义]
(1)的数组
//- [1]
(3)的数组
//- [3]
(1,2)的数组
//- [1, 2]
(-1)的数组
//- [-1]
可以用以下代码模拟Array.of方法:
函数ArrayOf(){
return[]slice . call(参数);
}
copyWidthin
CopyWidthin方法可以将指定位置的数组项复制到当前数组内部的另一个位置(它将覆盖原来的数组项),然后返回当前数组。使用copyWidthin方法修改当前数组。
array . prototype . copy within(target,start=0,end=this.length)
CopyWidthin将接受三个参数:
Target:此参数是必需的,数组项将从此位置被替换。
Start:这是一个可选参数。从这个位置读取数组项。默认值为0。如果为负,则表示从数组的右侧读取到左侧。
End:这是一个可选参数。默认情况下,在此位置停止读取的数组项等于Array.length。如果为负,则表示倒数。
让我们先看一个简单的例子,其中声明了一个items数组:
var items=[1,2,3,];//- [1,2,3,未定义x 7]
下面的代码将数组项粘贴到数组项的第六个位置。过去的数组项从项的第二个位置粘贴到第三个位置。
items.copyWithin(6,1,3)
//- [1,2,3,未定义 3,2,3,未定义 2]
这里还有一些例子:
//将位3复制到位0
[1, 2, 3, 4, 5].copyWithin(0,3,4)
//[4, 2, 3, 4, 5]
//-2相当于位置3,-1相当于位置4。
[1, 2, 3, 4, 5].copyWithin(0,-2,-1)
//[4, 2, 3, 4, 5]
//将位3复制到位0
[].copyWithin.call({length: 5,3: 1},0,3)
//{0: 1,3: 1,长度:5}
//将位2复制到数组末尾,并复制到位0。
var i32a=new Int32Array([1,2,3,4,5]);
i32a.copyWithin(0,2);
//Int32Array [3,4,5,4,5]
//对于未部署TypedArray的copyWithin方法的平台
//需要下面的写法。
[]. copy within . call(new int 32 array([1,2,3,4,5]),0,3,4);
//Int32Array [4,2,3,4,5]
数组.原型.填充
Array.prototype.fill方法用给定值填充数组:
['a ',' b ',' c']。填充(0)
//- [0, 0, 0]
新数组(3)。填充(0)
//- [0, 0, 0]
上述方法对于初始化空数组非常方便。数组中的所有现有元素都将被擦除。
此外,Array.prototype.fill方法还可以接受第二个和第三个参数,用于指定填充的起始位置和结束位置。
['a ',' b ',' c ',]。fill(0,2)
//- ['a ',' b ',0,0,0]
新数组(5)。填充(0,0,3)
//- [0,0,0,未定义x ^ 2]
Array.prototype.fill提供的值可以是任意的,不仅是数值,也可以是原始类型:
新数组(3)。填充({})
//- [{}, {}, {}]
但是,此方法不能接受数组的映射方法,但它可以接受一个索引参数或类似如下的参数:
新数组(3)。fill(函数foo () {})
//- [function foo () {},function foo () {},function foo () {}]
数组.原型.查找
Array.prototype.find方法用于查找第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行回调函数,直到找到第一个返回值为真的数组项,然后返回该数组项。如果没有满足条件的数组项,则返回undefined。
[1, 2, 3, 4, 5].查找(项目=项目2)
//- 3
[1, 2, 3, 4, 5].find((item,i)=i===3)
//- 4
[1, 2, 3, 4, 5].find(item=item===Infinity)
//-未定义
此外,该方法的回调函数可以接受三个参数,即当前值、当前位置和原始数组。
[1, 5, 10, 15].find(function(value,index,arr) {
返回值9;
}) //10
array . prototype . find索引
此方法类似于。一些和。找方法。比如。有些返回true;比如。查找要退回的项目。如果array [index]==item,则返回其索引。
Array.prototype.findIndex方法主要用于返回数组中数组项的位置。它非常类似于Array.prototype.find方法,并接受回调函数。如果满足回调函数的条件,将返回数组中数组项的位置。如果不满足所有数组项,将返回-1。
[1, 2, 3, 4, 5].查找(项目=项目2)
//- 2
[1, 2, 3, 4, 5].find((item,i)=i===3)
//- 3
[1, 2, 3, 4, 5].find(item=item===Infinity)
//- -1
这个方法也可以接受第二个参数,用来绑定回调函数的This对象。
注意:Array.prototype.find和Array.prototype.findIndex都可以找到NaN,弥补了Array的Index的不足。
【南】。索引Of(南)
//-1
【南】。findIndex(y=Object.is(NaN,y))
//0
在上面的代码中,indexOf方法不能识别数组的NaN成员,但是findIndex方法可以由Object.is方法来完成。
ES6遍历数组的方法
ES6提供了三个新方法:entries()、keys()和values()来遍历数组。它们都返回一个遍历对象,可由for遍历.循环的。唯一的区别是keys()遍历数组的键名,values()遍历数组的键值,entries()方法遍历数值的键值对。
for(设索引为['a ',' b']。keys()) {
console.log(索引);
}
//0
//1
for (let elem of ['a ',' b']。values()) {
console . log(elem);
}
//'a '
//'b '
for (let [index,elem] of ['a ',' b']。entries()) {
console.log(index,elem);
}
//0 'a '
//1个“b”
如果您不使用for.循环中,您可以手动调用遍历对象的下一个方法来遍历:
let letter=['a ',' b ',' c '];
let entries=letter . entries();
console.log(entries.next()。值);//[0,' a']
console.log(entries.next()。值);//[1,' b']
console.log(entries.next()。值);//[2,' c']
总结
这里简单总结一下ES6中关于数组的相关方法。说实话,刚接触ES6的时候,看了很多来来往往的东西。这里只是对相关知识的一个总结。
关于JavaScript学习笔记的ES6数组方法的小编就介绍到这里,希望对你有帮助!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。