es6中数组的扩展

一、扩展运算符(…[ ])的应用

1.转成参数序列

2.复制数组

const a1 = [1, 2];
const a2 = a1.concat(); //es5

const a3 = [...a1];     //es6
const [...a4] = a1;

3.合并数组 [...arr1, ...arr2, ...arr3] (浅拷贝)

4.解构赋值 const [first, ...rest] = [1, 2, 3, 4, 5]

5.正确返回字符长度 [...str].length

'x\uD83D\uDE80y'.length // 4
[...'x\uD83D\uDE80y'].length // 3

6.实现 Iterator 接口的对象
任何 Iterator 接口的对象,都可以用扩展运算符转为真正的数组。
对于那些没有部署Iterator接口的类似数组的对象,使用 Array.from(arrayLike),实际上任何有length属性的对象,都可以通过Array.from方法转为数组。

二、Array.from()

1.用于将两类对象转为真正的数组:类似数组的对象和可遍历的对象(包括 ES6 新增的数据结构 SetMap)。
2.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]
三、Array.of()

用于将一组值,转换为数组。这个方法的主要目的,是弥补数组构造函数Array()的不足。因为参数个数的不同,会导致Array()的行为有差异。

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

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

四、数组实例的 copyWithin()

将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组。
Array.prototype.copyWithin(target, start = 0, end = this.length)

五、数组实例的 fill()

1.可用于填充数组,数组中已有的元素,会被全部抹去。
2.fill()方法还可以接受第二个和第三个参数,用于指定填充的起始位置和结束位置。

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

// 注意,如果填充的类型为对象,那么被赋值的是同一个内存地址的对象,而不是深拷贝对象。
let arr = new Array(3).fill([]);
arr[0].push(5);
// arr = [[5], [5], [5]]
六、数组实例的 entries(),keys() 和 values()

for...of循环进行遍历,keys()是对键名的遍历、values()是对键值的遍历,entries()是对键值对的遍历。

for (let index of ['a', 'b'].keys()) {
    console.log(index);
}
// 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);
}1
// 0 "a"
// 1 "b"
七、数组实例的 includes()

表示某个数组是否包含给定的值(第二个参数表示搜索的起始位置),与字符串的includes()方法类似。

[1, 2, 3].includes(3, 3)   // false
[1, 2, 3].includes(3, -1)  // true
[1, 2, [3]].includes([3])  // false
[NaN].includes(NaN)        // true
八、数组实例的 flat(),flatMap()

1.flat()用于将嵌套的数组“拉平”,变成一维的数组。参数:想要拉平的层数,默认为1。

[1, 2, [3, [4, 5]]].flat()
// [1, 2, 3, [4, 5]]

//如果原数组有空位,flat()方法会跳过空位。
[1, 2, , 4, 5].flat()
// [1, 2, 4, 5]

[1, [2, [3]]].flat(Infinity) //Infinity:不管有多少层嵌套,都要转成一维数组
// [1, 2, 3]

2.flatMap() 方法对原数组的每个成员执行一个函数,然后对返回值组成的数组执行flat()方法。该方法返回一个新数组,不改变原数组。传入函数(类似map),只能展开一层

九、数组的空位的处理

1.ES5:

  • forEach(), filter(), reduce(), every()some() 都会跳过空位
  • map()会跳过空位,但会保留这个值
  • join()toString() 会将空位视为undefined,而undefinednull 会被处理成空字符串。

2.ES6:
明确将空位转为undefined

[...['a',,'b']]
// [ "a", undefined, "b" ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值