首页 > 编程语言 > 详细

数组的扩展

时间:2020-10-02 22:57:43      阅读:46      评论:0      收藏:0      [点我收藏+]

1. 扩展运算符

它是rest参数的逆运算,将一个数组转为用逗号分隔的参数序列。

  • 可用来代替数组的apply方法:
var args = [0,1,2];
//ES5
f.apply(null,args);
Math.max.apply(null,args);
Array.prototype.push.apply(arr1,arr2);
//ES6
f(...args);
Matn.max(...args);
arr1.push(...arr2);
  • 可用来合并数组,也可以将某些数据结构转为数组。(注意扩展运算符调用的是interator接口,如果一个对象没有部署该接口,就无法转换。不支持转换类似数组的对象)
//ES5
arr1.concat(arr2,arr3);
//ES6
[...arr1,...arr2,...arr3];
  • 与解构赋值合并
    注意扩展运算符用于解构赋值时,只能将参数放在最后一位,否则会报错。
  • 用于函数的返回值,返回数组或对象返回多个值
  • 将字符串转为真正的数组,好处是能正确识别32位的unicode字符。
[...‘hello‘];//[‘h‘,‘e‘,‘l‘,‘l‘,‘o‘]
  • 实现了Interator接口的对象
    任何Interator接口的对象都可使用扩展远算符转为真正的数组。比如Map,Set数据结构,Generator函数。

2. Array.from()

该方法用于将两类对象转为真正的数组:类似数组的对象,可遍历的对象。支持转换类似数组的对象(即必须有length属性)。
可接受第二个参数,作用类似于数组的map方法,将每个元素处理,处理后的值放入返回的数组。
可接受第三个参数用来绑定this。
另一个应用是将字符串转为数组,并正确返回字符串的长度。因为它能正确处理各种unicode字符,可以避免将大于\uFFFFFF的unicode字符算作两个字符。

//ES5 
var arr1 = [].splice.call(arraylike);
//ES6
var arr2 = Array.from(arraylike);

3. Array.of()

用于将一组值转换为数组。弥补了Array()构造函数的不足。(因为参数个数的不同会导致Array()的行为有差异,0个参数返回空数组;一个参数指定数组的长度,值为空,两个或两个以上参数返回由参数组成的新数组。

4. 数组实例copyWith()

会在当前数组内部将指定位置的成员复制到其它位置(覆盖原有成员),会修改原数组。
接受三个参数:
target:必选,从该位置开始替换数据。
start:可选,从该位置开始读取数据。
end:可选,到该位置前停止读取数据。

5. 数值实例的find()和findIndex()

都用于查找出第一个符合条件的数组成员,返回该成员。区别是find如果没有找到返回undefined,findIndex如果没有找到返回-1。可接收第二个参数绑定回调函数的this。
此外,这两个方法可发现NaN,弥补了indexOf的不足。(因为indexOf内部使用严格相等运算进行判断,会导致对NaN误判。

6. 数组实例的fill()

使用一个定值填充一个数组。会覆盖已有的元素。
可接受第二和第三个参数,用于指定填充的起始和结束位置。

7. 数组实例的keys()、values()、entries()

用于遍历数组,都返回一个遍历器对象,可用for...of循环遍历。
区别在于分别对键名、键值、键值对遍历

8. 数组实例的includes()

返回一个布尔值,第二个参数表示搜索的起始位置,如果大于数组长度会重置为从0开始.

9. 数组的空位

注意空位不是undefined。

0 in [undefined,undefined,undefined];//true
0 in [, , ,];//false

ES5对空位的处理不一致,大多数情况会忽略空位
ES6明确将空位转为undefined

数组的扩展

原文:https://www.cnblogs.com/sheepyj/p/13762866.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!