文章目录
一、数组的创建
简介
- 数组元素可以是任意类型
- 数组从
Array.prototype
继承属性
1.数组字面量
数组字面量即
let arr = [];
注意:
//逗号之间没有元素的数组叫做稀疏数组,也会占一个位置,但是值为undefined
let arr = ['a', , 'g',]
//数组最后一个元素后面可以有逗号,但是不会占数组长度,长度依然是3,而不是4
2.扩展操作符(…)
解释:在一个数组中包含另一个数组的所有元素,有点类似数组扩容
let arr = [11, 22, 33]
let arr1 = ['00', ...arr];
console.log(arr1[1]);//11
console.log(arr1[2]);//22
console.log(arr1[3]);//33
- 可以使用扩展操作符把任意字符串转换成单个字符的数组
let str = '123456';
let arr1 = str.split('')
console.log(arr1);//(6) ['1', '2', '3', '4', '5', '6']
let arr2 = [...str];
console.log(arr2);//(6) ['1', '2', '3', '4', '5', '6']
3.Array()构造函数
注释:不怎么用,了解
1.new Arrauy()
//不传参就是空数组,传参则指定数组长度,但是长度可以通过添加元素的方式改变,并不像Java中一样严格
2.Array.of()
3.Array.from()
二、数组的读写
解释:没什么需要做笔记的,都不是很难
- 需要注意的是数组的长度并不是固定的,比如一个数组长度5,给数组添加元素时数组的
length
属性会自动改变 - 数组是一种特殊的对象,数组的索引其实相当于属性名,但属性名不一定是索引,只有当属性名是正整数是才是索引,会自动改变length长度,属性名为其他的时候length则不会改变,如下
let ao = [44, 33];
ao['name'] = 66
console.log(ao['name']);//属性名是字符串,所有他不是索引,不会改变length长度
console.log(ao.length);//2
四、数组的增删
arr.push()
在数组末尾添加一个新元素,arr.pop()
删除数组末尾的元素并返回它arr.unshift()
在数组第一个位置添加一个新元素,arr.shfit()
则删除第一个位置的元素并返回它- 直接设置
length
属性,大于或等于length
的元素会删除 - 使用
delete删除
,这种方式类似于给元素赋值undefined,并不会改变数组长度
五、数组迭代的方式
for of
let arr = [1, , , 23, 4];
for (const [key, value] of arr.entries()) {
console.log(key, value);
}
- 使用数组方法
forEach
- 以及传统
fori
六、数组方法
1.迭代方法
注意:所有的数组迭代方法都需要接收一个函数作为第一个参数,传入的函数有三个参数,第一个是数组元素,第二个为数组索引,第三个为数组本身
arr.forEach(function())
let arr = [1, , , 23, 4];
//forEach会对稀疏数组未定义的元素自动忽略,不遍历!也就是不执行回调函数
arr.forEach(function (item, index, self) {})
arr.map(function())
也会和forEach
一样数组未定义的元素不会执行传入的函数。遍历结束返回一个由返回值组成的数组。但是它返回的数组,其长度,稀疏度和原数组一样arr.filter(function())
,这个方法的参数应该是一个断言函数(即参数的返回值为boolean),返回原数组的子数组,子数组的元素由断言函数决定,真则这个元素加入子数组,同样忽略数组未定义的元素
let arr = [1, 2, 3, 5];
let child = arr.filter((item, index) => index % 2 === 0)
console.log(child);//[1, 3]
arr.find(function())和arr.findIndex(function())
返回元素和返回元素索引,参数为断言函数,其返回结果由断言函数的真值决定。只返回一次,断言函数为真,立刻停止迭代arr.some(function())和arr.every(function())
,它们的返回值为boolean,参数为断言函数。arr.some()
任何一次断言函数返回ture,整个表达式返回true,全部返回false,整个表达式返回false。arr.every()
任何一次断言函数返回false,整个表达式发挥false,全部返回true,整个表达式返回truearr.reduce(function(),[初始值],value,index,self)
这个函数用来对数组进行并归操作
并归解释:即把多个值合并成为一个值
第一个参数:需要是并归函数
第二个参数:初始值
let arr = [1, 2, 3, 4, 5];
let result = arr.reduce((x, y) => x + y, 10);//不仅局限于加法并归,其他也可以。
console.log(result);//25 10的初始值加上1,2,3,4,5
2.其他API
- 截取数组:
arr.slice(startIndex,endIndex)
,返回新数组,截取规则左闭右开 - 删除和添加数组元素:
arr.splice(startIndex,length,item)
,返回被删除的元素组成的数组(会改变原数组),item
是表示在startIndex
插入的元素 - 数组填充:
arr.fill(item,startIndex,endIndex)
会修改调用它的数组,返回修改后的数组。把数组从startIndex
到endIndex
(左闭右开)的元素替换成item
arr.copyWithin()
没懂arr.reduce(fun,[初始值])
对数组进行并归操作(并归:多个值合并成一个值),第一个参数为并归函数,第二个参数为初始值。
let arr = [1, 2, 3, 4, 5];
let result = arr.reduce((x, y) => x + y, 10);
console.log(result);//结果为25 10的初始值加上1,2,3,4,5
//并归函数可以+ - * / .......等等;
3.数组索引和排序方法
arr.indexOf(),arr.lastIndexOf()
,搜索指定的值返回索引,没找到返回-1,区别是从前往后找,和从后往前找arr.includes()
返回boolean,测试数组是否包含某个元素arr.sort()
排序数组,不传参则按照字母顺序排序。如果要自定义排序规则,需要传入一个函数。arr.reverse()
反转数组