经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JavaScript » 查看文章
关于ES6中数组新增的方法详解
来源:jb51  时间:2022/3/29 13:47:04  对本文有异议

在ES6之前,创建数组的方式有2种:

一: 通过数组字面量

  1. let array = [1,2,3];
  2. console.log(array);//[1,2,3]

二: 通过new Array()创建数组

  1. let array = new Array(1, 2, 3);
  2. console.log(array); //[1,2,3]

Array.find((item,indexArr,arr)=>{}) 掌握

找出第一个符合条件的数组成员。

它的参数是一个回调函数,对所有数组成员依次执行该回调函数。

直到找出第一个返回值为true的成员,然后返回该成员。

如果没有符合条件的成员,则返回undefined。

  1. -- 找出第一个大于15的数字
  2. let arr = [10, 20, 30]
  3. let firstItem = arr.find((item, index, Arr) => {
  4. return item > 15
  5. })
  6. console.log('firstItem==>', firstItem); //输出20
  7.  
  8. -- 找出第一个大于19的数字的这一项的值
  9. let arr = [{
  10. age: 10
  11. }, {
  12. age: 20
  13. }, {
  14. age: 30
  15. }]
  16. let firstItem = arr.find((item, index, Arr) => {
  17. return item.age > 19
  18. })
  19. console.log('firstItem==>', firstItem); //输出{age: 20}

Array.findIndex((item, index, Arr) => {}) 掌握

数组实例的 findIndex 方法的用法与find方法非常类似,

返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回-1。

  1. let arr = [{
  2. age: 10
  3. }, {
  4. age: 20
  5. }, {
  6. age: 30
  7. }]
  8. let a = arr.findIndex((item, index, Arr) => {
  9. return item.age > 15
  10. })
  11. let b = arr.findIndex((item, index, Arr) => {
  12. return item.age > 45
  13. })
  14. console.log('a==>', a); //输出1
  15. console.log('b==>', b); //输出-1
  16.  
  17.  
  18. //查找数组的某一项是否有某个值
  19. //返回第一个符合条件的数组成员的位置
  20. const arr = [{
  21. id: 001
  22. }, {
  23. id: 002
  24. }, {
  25. id: 003
  26. }];
  27. let index = arr.findIndex(item => {
  28. return item.id == '004'
  29. })
  30. console.log(index);

Array.flat()用于拉平嵌套的数组[推荐-超级好用]

数组的成员有时还是数组,Array.flat()用于将嵌套的数组“拉平”,变成一维的数组。

  1. 该方法返回一个新数组,对原数据没有影响。
  2. [1, 2, [3, 4]].flat() 读音【fu la t
  3.  
  4. flat()默认只会“拉平”一层,如果想要“拉平”多层的嵌套数组。
  5. 可以将flat()方法的参数写成一个整数,表示想要拉平的层数,默认为1
  6.  
  7. [1, 2, [3, [4, 5]]].flat()
  8. 上面代码中,表示想要拉平的层数,默认为1
  9. // [1, 2, 3, [4, 5]]
  10.  
  11. [1, 2, [3, [4, 5]]].flat(2)
  12. 上面代码中,flat()的参数为2,表示要“拉平”两层的嵌套数组。
  13. // [1, 2, 3, 4, 5]
  14.  
  15. 如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数。
  16. [1, [2, [3]]].flat(Infinity)
  17. // [1, 2, 3]
  18.  
  19. 如果原数组有空位,flat()方法会跳过空位。
  20. [1, 2, , 4, 5].flat()
  21. // [1, 2, 4, 5]

Array.at()返回对应下标的值[超级好用]

我们都知道JavaScript不支持数组索引值为负索引。 

那么想要表示数组的最后一个成员,不能写成arr[-1],只能使用arr[arr.length - 1]。

为了解决负索引这个问题,es6中为数组实例增加了at()方法,接受一个整数作为参数。

返回对应位置的成员,支持负索引。

这个方法不仅可用于数组, 也可用于字符串和类型数组( TypedArray)。

如果参数位置超出了数组范围,at()返回undefined。

  1. const arr = [100, 120, 18, 130, 4];
  2. console.log(arr.at(1)) //120
  3. console.log(arr.at(-1)) //4
  4. console.log(arr.at(-5)) //100
  5. console.log(arr.at(-6)) //undefined

Array.from() [掌握]

一个类似数组的对象,Array.from将它转为真正的数组。

需要注意的是:这个类似数组的对象必须要有length属性才可以,转为数组。

否者将会转为为一个空数组

  1. let arrayLike = {
  2. '0': 'a',
  3. '1': 'b',
  4. '2': 'c',
  5. length: 3
  6. };
  7.  
  8. // ES5的写法
  9. var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']
  10.  
  11. // ES6的写法
  12. let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']
  13.  
  14. 当没有类似数组的对象没有length属性
  15. let arrayLike = {
  16. '0': 'a',
  17. '1': 'b',
  18. '2': 'c',
  19. };
  20. //此时返回的是一个空数组
  21. let arr2 = Array.from(arrayLike); // []

Array.of() 了解

Array.of()方法用于将【一组数值】转换为数组.

简单的使用:

  1. const a = Array.of(10, 20, 26, 38);
  2. console.log(a); // [10, 20, 26, 38]
  3.  
  4. const b = Array.of(1).length;
  5. console.log(b); // 1
  6.  
  7. Array.of()可以用以下的代码模拟实现:
  8. function ArrayOf() {
  9. return [].slice.call(arguments);
  10. }

Array.includes的使用

Array.prototype.includes方法返回一个布尔值,表示某个数组是否包含给定的值。

与字符串的includes方法类似。ES2016 引入了该方法。

简单的使用方法

  1. const arr = [100, 200, 300];
  2. console.log(arr.includes('100')) //false
  3. console.log(arr.includes(100)) //true

 没有该方法之前,我们使用数组的indexOf方法,检查是否包含某个值。

  1. if (arr.indexOf(el) !== -1) {
  2. // 有这个值
  3. }
  4. indexOf方法有两个缺点,一是不够语义化,它的含义是找到参数值的第一个出现位置,
  5. 所以要去比较是否不等于-1,表达起来不够直观。
  6. 二是,它内部使用严格相等运算符(===)进行判断,这会导致对NaN的误判。
  7. [NaN].indexOf(NaN) // -1
  8.  
  9. includes使用的是不一样的判断算法,所以没有这个问题。
  10. [NaN].includes(NaN)
  11. // true

扩展运算符 (...)

扩展运算符是三个点(...),

将一个数组转为用逗号分隔的参数序列。

  1. console.log(...[1, 2, 3])
  2. // 1 2 3
  3.  
  4. console.log(1, ...[2, 3, 4], 5)
  5. // 1 2 3 4 5
  6.  
  7. [...document.querySelectorAll('div')]
  8. // [<div>, <div>, <div>]
  1. let arr1=[11,22,];
  2. let arr2=["aa","bb"];
  3. // es5的合并
  4. let arr=arr1.concat(arr2);
  5. console.log(arr) // [11, 22, "aa", "bb"]
  6.  
  7. //es6
  8. let newarr=[...arr1,...arr2]
  9. console.log(newarr) // [11, 22, 33, 55, "aa", "bb", "cc", "dd"]
  1. // 函数内部有一个对象,arguments可以获取到实参,但是一个伪数组
  2. //Array[饿 rei]
  3. function sun(){
  4. console.log(arguments)
  5. //Arguments(8) [1, 2, 3, 4, 5, 6, 7, 9, callee: ?, Symbol(Symbol.iterator): ?] 他是一个伪数组
  6. }
  7. sun(1,2,3,4,5,6,7,9);
  8.  
  9.  
  10. // 如何将函数内部的伪数组变为真实的数组 方法1
  11. function sun(){
  12. let ags=Array.prototype.slice.call(arguments);
  13. ags.push(150);
  14. console.log(ags); //[1, 2, 3, 4, 5, 6, 7, 9, 150]
  15. }
  16. sun(1,2,3,4,5,6,7,9);
  17.  
  18.  
  19. // 如何将函数内部的伪数组变为真实的数组 方法2
  20. function sun(){
  21. let ags=[...arguments];//将伪数组百年未真实的数组
  22. ags.push(150);
  23. console.log(ags); //[1, 2, 3, 4, 5, 6, 7, 9, 150]
  24. }
  25. sun(1,2,3,4,5,6,7,9);
  26.  
  27. // 总结扩展运算符是... [...变为真实数组的对象]

数组的空位

数组的空位指的是,数组的某一个位置没有任何值.

比如Array()构造函数返回的数组都是空位。

  1. let arr = new Array(3)
  2. console.log(arr); // [, , ,] 谷歌浏览器中会有出现 [空属性 × 3]

 上面代码中,Array(3)返回一个具有 3 个空位的数组。

  1. forEach(), filter(), reduce(), every() some()都会跳过空位。
  2. map()会跳过空位,但会保留这个值
  3. join()和toString()会将空位视为undefined,而undefinednull会被处理成空字符串。
  4.  
  5. ps:ES6 则是明确将空位转为undefined
  6. let arr = new Array(3)
  7. console.log(arr[0] === undefined); //true

ES5 对空位的处理,已经很不一致了,大多数情况下会忽略空位。 

  1. ps:ES6 则是明确将空位转为undefined
  2. Array.from()方法会将数组的空位,转为undefined,也就是说,这个方法不会忽略空位。
  3. Array.from(['a',,'b'])
  4. // [ "a", undefined, "b" ]
  5.  
  6. 扩展运算符(...)也会将空位转为undefined
  7. [...['a',,'b']]
  8. // [ "a", undefined, "b" ]
  9.  
  10. new Array(3).fill('a') // ["a","a","a"]
  11.  
  12. for...of循环也会遍历空位。
  13. let arr = [, ,];
  14. for (let i of arr) {
  15. console.log(1);
  16. }
  17. // 1
  18. // 1
  19. 上面代码中,数组arr有两个空位,for...of并没有忽略它们。
  20. 如果改成map()方法遍历,空位是会跳过的

总结

到此这篇关于ES6中数组新增方法的文章就介绍到这了,更多相关ES6数组新增方法内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号