ES6部分数组扩展方法

9 篇文章 0 订阅
4 篇文章 0 订阅

1. Array.from()

Array.from方法用于将两类对象转为真正的数组:类似数组的对象和可遍历的对象。

先看一个例子

let fakeArr = {
	'0': 'a',
    '1': 'b',
    '2': 'c',
    length: 3
}

// es5的写法
var arr1 = [].slice.call(fakeArr)

// es6的写法
var arr2 = Array.from(fakeArr)

只要是部署了Iterator接口的数据结构,Array.from都可以将其转为数组。

如果参数是一个真正的数组,Array.from会返回一个一模一样的数组。值得注意的是,扩展运算符(…)也可以将某些数据结构转为数组。扩展运算符背后调用的是遍历器接口,如果对象没有部署就不能转换。Array.from方法还支持类数组对象。所谓类数组对象,本质只有一点,就是必须有length属性。所以,任何有length属性的对象,都可以通过Array.from转为数组,而此时扩展运算符就无法转换。

Array.from({length: 3})
// [undefined,undefined,undefined]

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

const toArray = (() => 
	Array.from ? Array.from : obj => [].slice.call(obj)                
)()

Array.from还可以接受第二个参数,类似于map方法,对每个元素进行处理,将处理后的值放入返回的数组。

Array.from(arrayLike, x => x * x);
// 等同于
Array.from(arrayLike).map(x => x * x);

如果map函数里面用到了this关键字,还可以传入Array.from的第三个参数,用来绑定this。

Array.from可以将各种值转为真正的数组,并且提供map功能。这实际上意味着,只要有一个原始的数据结构,就可以对他的值进行处理,然后转成规范的数组结构,进而就可以使用数量众多的数组方法。

Array.from({length: 2},() => 'Peggy')
// ['Peggy','Peggy']

Array.from的第一个参数指定了第二个参数运行的次数。这种特性可以让该方法的用法变得很灵活。

Array.from的另一个应用是将字符串转为数组,然后返回字符串的长度。

2. Array.of()

Array.of方法用于将一组值,转为数组。且不存在由于参数不同而导致的重载。

Array.of(3, 11, 8) // [3,11,8]
Array.of(3) // [3]
Array.of(3).length // 1

这个方法主要是为了弥补数组构造函数Array的不足,因为参数个数不同,会导致Array()行为有差异

Array() // []
Array(3) // [, , ,]
Array(3, 11, 8) // [3, 11, 8]

只有当参数个数不少于2时,Array()才会返回有参数组成的新数组,参数个数只有一个的时候,实际上是指定数组的长度。

Array.of总是返回参数值组成的数组,如果没有参数,就返回一个空数组。等同于

function ArrayOf(){
    return [].slice.call(arguments)
}

3. 数组实例的copyWithin

数组实例的copyWith,在当前数组内部,将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组。也就是说使用这个方法,会修改当前数组。

接收三个参数:

  • target(必需):从该位置开始替换数据。
  • start(可选):从该位置开始读取数据,默认为 0。如果为负值,表示从末尾开始计算。
  • end(可选):到该位置前停止读取数据,默认等于数组长度。如果为负值,表示从末尾开始计算。

4. 数组实例的find和findIndex

数组实例的find方法,用于找出第一个符合条件的数组成员。他的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员,如果没有返回undefined。

[1, 5, 10, 15].find(function(value, index, arr) {
  return value > 9;
}) // 10

find方法可以接受三个参数,分别为当前值,当前位置和原数组。

findIndex方法和find方法非常类似,返回第一个符合条件的数组成员的位置,否则返回-1。

另外,这两个方法都可以发现NaN,弥补了数组的indexOf方法的不足。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值