创建数组
ES6之前创建数组的最常用的两种是数组字面量和Array()构造函数。 ES6新增了几个创建数组的方法
- 扩展运算符
let a = [1,2,3]
let b = [0,...a,4]
- Array.of()——新增的工厂方法
在使用Array()构造函数时,传递单个数值参数,这个参数会成为该数组的长度值,传递两个数值时,则会作为该数组的元素。也就是Array()无法创建单个数值元素的数组。 Array.of()完美解决了这个问题:
Array.of() //返回一个没有参数的空数组
Array.of(10) //返回只有一个数值元素的数组
Array.of(1,2,3) //[1,2,3]
- Array.from()——新增的工厂方法
该方法期待一个可迭代对象或类数组对象作为第一个参数,并返回包含该对象元素的新数组。是创建数组副本的一种简单方法。如果传入的是可迭代对象,与使用[...interable]一样。
读写数组元素
读写数组的方法与之前的方法并没有太多的更新,还是使用[]和length属性来读写
稀疏数组
判断是否是稀疏数值,关键在于数组length的属性值是否大于元素个数。
数组长度
length属性就是数组中的元素的个数。它的值比数组的最高索引大1。 length还可用于删除,新增数组。
添加和删除数字元素
添加数组元素
- 新索引赋值——最简单
a[3] = "three"
- push() and unshift() 分别用于在数组末尾和开头插入元素
删除数组元素 delete
删除数组元素类似给该元素赋值undefined,不会改变length的属性值,数组会变稀疏。
迭代数组
-
for/of——最常用 但遍历稀疏数组时,不存在的元素均返回undefined。
-
entries() 搭配解构赋值可以同时获得数组的索引和值
let letters = [...'hello world']
let everyother = ''
for(let [i,v] of letters.entries()){
if(i % 2 === 0) everyother += v; //偶素序列字母
}
- forEach() 能感知稀疏数组
- 还有map()和filter()方法,后面将介绍
多维数组
js并不支持多维数组,但不支持也可以使用。具体方法就是使用数组的数组,两个[]即可。
数组方法
迭代方法
- forEach()——无返回
- map()——有返回,返回的数组与原始数组一样稀疏
- filter()——有返回,期待接受断言函数,返回元素为true的新数组,跳过缺失,稠密的
- find()——有返回,寻找断言函数的真值,匹配第一个就结束迭代,返回匹配的元素,找不到返回undefined
- findIndexx()——有返回,与find()区别在于返回的是匹配元素的索引,找不到返回-1
- every()——返回布尔值,数组断言方法,类型全称量词,全部为true才返回true
- some()——返回布尔值,也是数组断言,类似存在量词,一个返回true就返回true
- reduce()和reduceRight()都用于归并数组元素,最终产生一个值,区别在于归并的顺序不一样
打平方法
- flat()
- flatMap()
添加数组
concat()创建并返回一个新数组,操作代价有点大,还不如直接使用push()或splice()就地修改数组。
栈队列方法
就是push() pop() unshift() shift(),具体不做介绍,前一篇笔记写过了
提取、替换、填充、复制切片
- slice()返回一个数组的切片,不会修改原数组,接收两个参数,一是开始的位置,二是要切的个数
- splice()插入删除的通用方法,会修改原数组
- fill()用于将数组的元素设置为指定的值
- copyWithin()把数组切面复制到数组中的新位置,这有点复杂,目前还没用到,不深究
数组索引与排序
- 数组索引
-
indexOf()从头开始找,第一个参数为要寻找的元素,第二个参数为开始寻找的位置
-
lastIndexOf()倒着找,和第一个方法类似 以上两个方法都使用===匹配查找。
-
includes()用于查找该元素是否存在
- 排序
- sort()
- reverse()反转,直接反转原数组
数组到字符串转换
- join()
- toString()
- toLocaleString()
静态数组函数
Array.isArray()用于确定一个未知值是不是数组