#es6数组的扩展

------------恢复内容开始------------

# 1、Array.from() 法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括 ES6 新增的数据结构 Set 和 Map)。 类似数组转成真正的数组 `let arrayLike = { '0':'a'; 1':'b'; '2':'c'; length } let arr2 = Array.from(arrayLike)//['a','b','c']

image

`
上面代码中,字符串和 Set 结构都具有 Iterator 接口,因此可以被Array.from转为真正的数组。

如果参数是一个真正的数组,Array.from会返回一个一模一样的新数组。

image
扩展运算符背后调用的是遍历器接口(Symbol.iterator),如果一个对象没有部署这个接口,就无法转换。Array.from方法还支持类似数组的对象。所谓类似数组的对象,本质特征只有一点,即必须有length属性。因此,任何有length属性的对象,都可以通过Array.from方法转为数组,而此时扩展运算符就无法转换。

对于还没有部署该方法的浏览器,可以用Array.prototype.slice方法替代。

image

2、Array.of()

用于将一数值,转换为数组
image
这个方法的主要目的,是弥补数组构造函数Array()的不足。因为参数个数的不同,会导致Array()的行为有差异。
image
上面代码中,Array()方法没有参数、一个参数、三个参数时,返回的结果都不一样。只有当参数个数不少于 2 个时,Array()才会返回由参数组成的新数组。参数只有一个正整数时,实际上是指定数组的长度。
而Array.of()基本上可以用来替代Array()或new Array(),并且不存在由于参数不同而导致的重载。它的行为非常统一。

3、数组实例copyWithin()

数组实例的copyWithin()方法,在当前数组内部,将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组。也就是说,使用这个方法,会修改当前数组。
target(必需):从该位置开始替换数据。如果为负值,表示倒数。
start(可选):从该位置开始读取数据,默认为 0。如果为负值,表示从末尾开始计算。
end(可选):到该位置前停止读取数据,默认等于数组长度。如果为负值,表示从末尾开始计算。
Array.prototype.copyWithin(target,start=0,end=this target)
image

4、数组实例find()和findIndex()

find()用于找出第一个符合条件的数组成员,它的参数是一个回调函数
image
image
上面代码中,find方法的回调函数可以接受三个参数,依次为当前的值、当前的位置和原数组。

findIndex()
与find()方法类似,返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回-1。
image
上面的代码中,find函数接收了第二个参数person对象,回调函数中的this对象指向person对象。

5、数组实例fill()

给定值,填充一个数组
image
上面代码表明,fill方法用于空数组的初始化非常方便。数组中已有的元素,会被全部抹去。

6、数组实例的entries(),keys(),values()用于遍历数组=for...of

唯一的区别是keys()是对键名的遍历、values()是对键值的遍历,entries()是对键值对的遍历。
image

7、数组实例includes()

判断数组里是否存在参数,返回布尔值;
参数1数组内的内容;参数二数组索引值
image
image
注:Map 和 Set 数据结构有一个has方法,需要注意与includes区分。
Map 结构的has方法,是用来查找键名的,比如Map.prototype.has(key)、WeakMap.prototype.has(key)、Reflect.has(target, propertyKey)。
Set 结构的has方法,是用来查找值的,比如Set.prototype.has(value)、WeakSet.prototype.has(value)。

8、数组实例的flat();flatMap()

用于将嵌套的数组“拉平”,变成一维的数组。该方法返回一个新数组,对原数据没有影响。
image
flat()默认只会“拉平”一层,如果想要“拉平”多层的嵌套数组,可以将flat()方法的参数写成一个整数,表示想要拉平的层数,默认为1。
参数改为2则拉平2层,如果数组有空位会直接跳过空位
image
如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数。

------------恢复内容结束------------

posted @ 2021-09-06 23:26  正常的名字  Views(34)  Comments(0Edit  收藏  举报