tnblog
首页
视频
资源
登录

es6 数组的新增方法

6013人阅读 2020/7/4 17:17 总访问:118149 评论:0 收藏:0 手机
分类: ES6

数组的扩展

  • 类数组 / 伪数组
  • Array.from()
  • Array.of()
  • copyWithin()
  • fill()
  • includes()

类数组 / 伪数组:

什么是类数组或者伪数组呢?? >> 指的就是不是真正意义上的数组 如:

  1. let div1 = document.getElementsByTagName('div')
  2. console.log(div1) // HTMLCollection []
  3. let div2 = document.getElementsByClassName('div')
  4. console.log(div2) // HTMLCollection []
  5. let div3 = document.querySelectorAll('.xx')
  6. console.log(div3) // NodeList []

从以上代码输出信息可知 具有数组的标识 [] 和 length 但是想这些数组中使用 push() 方法就会报错 从这步可以检测出 这些数组不是真正意义上的数组 不具有数组的方法 但是具有数组的 length 属性 故称之为 伪数组 / 类数组

检测数组的方法:

  1. console.log(div2 instanceof Array) // true 是数组 false 就不是数组

问题: 如何将伪数组转换为真正意义上的数组呢??

  1. // ES5 做法
  2. let arr = Arrray.prototype.slice.call(div3)
  3. console.log(arr) // []
  4. arr.push(123)
  5. console.log(arr) [123]

函数参数的 argument 参数也是一个伪数组

ES6 中有没有直接转化为数组的方法 Array.from()

  1. let arrayLike = {
  2. 0: 'es6',
  3. 1: 'es7',
  4. 2: 'es8',
  5. length: 3
  6. }
  7. let arr = Array.from(arrayLike)
  8. arr.push('es9')
  9. console.log(arr) // ['es6', 'es7', 'es8', 'es9']

使用数组的构造函数的一些问题

  1. let arr = new Array(1, 2) // 当参数为两个以上时 这里的参数就是 数组的每项值
  2. console.log(arr) // [1, 2]
  1. let arr = new Array(3) // 当参数为 1 个时 代表初始化的数组的长度
  2. console.log(arr.length) // 3

如何优雅的处理以上的问题呢? Array.of() 方法即可解决

  1. let arr = Array.of(3)
  2. console.log(arr) // [3]
  3. let arr = Array.of(3, 5, 7)
  4. console.log(arr) // [3, 5, 7]

Array.of() 就是为了处理数组构造器存在的一些问题而设定 使用这个方法即使值传入一个参数 也会是数组的项值 而不是数组的长度值

用法:

  1. let arr = Array.of(1, 'name', true, [1, 'xiaojian', false, {age: 12}], {age: 23})
  2. console.log(arr)

通过以上的输出结论可知: 我们可以将各种各样的数据通过 Array.of 方式拼成一个数组

数组值替换: Array.copyWithin()

  1. let arr = [1, 2, 3, 4, 5]
  2. console.log(arr.copyWithin(arr)) // [1, 4, 5, 4, 5]

copyWithin() 支持3个参数:

target: 复制到指定目标索引位置

start: 元素复制的起始位置

end: 停止复制的索引位置(默认为 array.length) 如果为负值,表示倒数

数组填充: Array.fill()

  1. let arr = [1, 2, 3, 4, 5]
  2. arr.fill('xiaojian', 1, 3)
  3. console.log(arr) // [1, 'xiaojian', 'xiaojian', 4, 5 ]
  4. // 如果只传入一个参数
  5. arr.fill(0)
  6. console.log(arr) // 0,0,0,0,0

fill() 支持3个参数:

value: 填充的值 [必传]

start: 开始填充位置 [可选]

end: 停止填充位置 [可选] 默认是数组的长度

是否包含: includes()

在 es5 之前为了检测某一个项是不是在数组中存在 通常通过 indexOf() 方法配合

indexOf() 方法可以获得数组元素在数组中的索引 如果存在就会返回索引值 不存在就会返回 -1

然而有以下情况:

  1. let arr = [1, 2, 3, NaN]
  2. console.log(arr.indexOf(NaN)) // -1
  3. console.log(NaN == NaN) // false 在js 中 NaN 是不等于 NaN 的 所以在数组中通过 indexOf() 方法得到的就是 -1

以上情况可以通过 includes() 方法即可处理

  1. let arr = [1, 2, 3, NaN]
  2. arr.includes(NaN) // true
评价

es6 新增特性 解构赋值

ES6 中数据解构赋值在 ES6 中通过使用解构赋值代码可以方便时使我们快速的上手代码的实现方式 · 数组的解构:有一下的代...

js与es6中基本语法异同比较

前端刷副本日记chapter1!!js中和ES6中声明变量的区别://js中value在声明之前可以使用value="黄大仙";varvalue...

es6中一些常用基本函数的使用

前端刷副本日记chapter2!!ES6中一些常用基本函数的使用//按条件筛选数组中指定的值//varresult=[];//varsports=["篮...

es6新增的字符串方法

String.fromCodePoint()String.raw()实例方法:codePointAt()实例方法:normalize()实例方法:includes(), startsWith(), e...

es6 Reflect

概述Reflect对象与Proxy对象一样,也是 ES6 为了操作对象而提供的新 API。Reflect对象的设计目的有这样几个。(1) 将Objec...

es6 Module 的语法介绍

历史上,JavaScript 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来。其他...

es6块级作用域

为什么需要块级作用域?ES5 只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景。第一种场景,内层变量...

js,es6在集合中排除某些数据。js判断集合中是否存在某个值

js判断集合中是否存在某个值利用indexOf就可以了,在集合中可以使用indexOf找某个值,如果找不到就返回-1 const noDataLes...
大概你身上总有我喜欢的味道,所以我一见你就开心的笑
排名
23
文章
19
粉丝
5
评论
1
vs code 插件安装推荐
修心 : 背景的妹子好评啊!
如何完全干净的卸载 vs code编辑器
剑轩 : vs code插件这么顽强的么
广告终结插件推荐
剑轩 : 我好像也是用的这个
windoes 强力下载工具Internet Download Manager
饰心 : 线程不要开多了 开多了要遭网站拉黑
推荐一款三无压缩软件:bandizip
瑾语 : 用过 感觉没rar好用
修改电脑的鼠标指针样式
剑轩 : 挺喜欢你这个个性签名的
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术