,,JavaScript学习笔记之ES6数组方法

,,JavaScript学习笔记之ES6数组方法

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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: