ES6中数组的扩展(二)

Array.of

Array.of方法用于将一组值,转换为数组

	Array.of(1, 4, 6);
	// [1, 4, 6]
	Array.of(3);
	// [3]
	Array.of(3).length;
	// 1

此方法主要弥补Array() 方法的不足,参数个数的不同,会导致Array() 返回的结果也不同

	Array() // []
	Array(3) // [undefined, undefined, undefined,]
	Array(1, 4, 6) // [1, 4, 6]

上述一个参数和三个参数的结果完全不是理想状态
只有当参数不小于2个时,Array() 才会返回一个新数组
当参数只有一个时,实际值得是数组的长度

Array.of完全可以替代Array和new Array

	Array.of(); // []
	Array.of(undefined); // []
	Array.of(3); // [3]
	Array.of(1, 3, 5); [1, 3, 5]

Array.of 返回的就是参数个数项的具体值,如果参数为空,那就返回空数组

Array.of 模拟实现

	function arrayOf () {
		return [].slice.call(arguments)
	}
	
	arrayOf(1, 3, 5, 7)
	// [1, 3, 5, 7]

数组实例的copyWithin()

修改当前数组实例的方法
从指定位置开始复制到其他位置(会覆盖原数据),返回当前实例

	Array.prototype.copyWithin(target, start = 0, end = this.length)

三个参数

target (必填) 从这个位置开始替换,为负值,表示倒数

start (选填)从该位置开始读取,默认为0,如果为负值,表示倒数

end (选填) 从该位置停止读取,默认时数组长度,如果为负值,表示倒数

参数格式为number, 如果不是会转换为number

	[1, 2, 3, 4, 5].copyWithin(0, 3);

上面表示,
从第0位开始替换,从第4位查找(4),
由于第三个参数没有写,默认数组长度4(5),
被查找替换的就是4 ,5 所以1, 2 就被替换掉了,
并返回当前替换之后的数组实例

	[1, 2, 3, 4, 5].copyWithin(0, 3, 4)
	// [4, 2, 3, 4, 5]
	// 第三位开始第四位结束,截取4
	
	[1, 2, 3, 4, 5].copyWithin(0, -2, -1)
	// [4, 2, 3, 4, 5]
	// -2为第三位, -1为第四位

	[].copyWithin.call({length : 5, 3 : 1}, 0, 3)
	// {0 : 1, 3 : 1, length: 5}
	// 只是把3号位的赋值到0号位

	[1, 2, 3, 4, 5].copyWithin(0, 2)
	// [3, 4, 5, 4, 5]
	// 从第二位开始截取到数组结束,复制到0位
	

数组实例的find() 和 findIndex()

数组实例的find方法,用于找到第一个符合条件的数组成员,他的参数是一个回调函数。

所有数组成员会一次执行该回调函数,直到找到第一个返回值为true的成员

如果找不到符合条件的值,那么就返回undefined

	[1, 4, -5, 10].find((n) => n < 0);
	// -5

上面代码找出第一个小于零的值

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

find方法可以接受三个参数,依次为当前值,当前索引,原数组

数组的findIndex方法的用法 与find方法非常类似,返回当前第一个符合条件值的索引位,如果整个数组没有匹配到,那么返回-1.

	[1, 5, 10, 20].findIndex(function (value, index, arr) {
		return value > 1
	})
	// 1
	
	[1, 5, 10, 20].findIndex(function (value, index, arr) {
			return value < 1
	})
	// -1

这两个方法都可以接受第二个参数,用来绑定回调函数的this对象

	function foo (value) {
		return value > this.age
	}
	
	let person = {age: 20, sex: 'male'}
	[18, 19, 25, 30].find(foo, person)
	// 25

这两个方法都可以弥补indexof 发现不了NaN

	[NaN].indexof(NaN);
	// -1

	[NaN].findIndex( v => Object.is(NaN, v));
	// 0

indexof无法获取正确的索引位置,但是findIndex可以弥补
借助了Object.is 把数组每一位对比NaN

数组实例的fill()

fill方法使用给定值,填充一个数组

	['a', 'b', 'c'].fill(7)
	// [7, 7, 7]

	new Array(3).fill(7)
	// [7, 7, 7]

上面代码初始化数组很实用,fill可以用来改变原数组

fill方法还可以接受第二个第三个参数,用于指定填充的其实位置和结束位置

	['a', 'b', 'c'].fill(7, 1, 2)
	// [a, 7, c]
	// 从第一位开始,到第二位结束

如果填充的是数组或对象,那么实际保存的是一个引用值,即只是对应的指针

	let arr = new Array(3).fill({name: 'mike'});
	arr[0].name = 'ben';
	arr
	// [{name: 'ben'}, {name: 'ben'}, {name: 'ben'}]

	let arr1 = new Array(3).fill([]);
	arr1[0].push(5);
	arr1
	// [[5], [5], [5]]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值