1.创建数组
直接创建
var arr=[1,2,3];
通过构造函数创建
var arr = new Array(); //不传值时,arr为空数组
console.log(arr); //[]
var arr1 = new Array(3); //传一个值时,表示当前数组的长度是多少
console.log(arr1); //[empty*3],长度为3的空数组
var arr2 = new Array(2, 3, 4); //传2个以上值时,正常数组
console.log(arr2); //[2,3,4]
2.数组的使用
数组使用[下标]来获取成员。
使用length属性类获取数组的长度。
3.数组的操作方法
①增删改查
(1)增加
push() 在数组末尾添加元素,可以添加多个值。(进栈) 返回数组长度,改变原数组。
unshift() 在数组头部添加元素,可以添加多个值。 返回数组长度,改变原数组。
使用[]来实现数组的增加,修改和查找。
(2)删除
delete() 返回值为boolean值。 只删除值,不删除下标,改变原数组。
pop() 在数组末尾删除,不接收参数,调用一次删除一个。(出栈)返回删除的值,改变原数组。
shift() 在数组头部删除,不接收参数,调用一次删除一个。返回删除的值,改变原数组。
(3)修改和查看,使用[下标]就可以实现
②转化,将数组转化成字符串
(1)toString()
(2)join() 默认以逗号拼接数组,可以传入其他值拼接。
返回一个包含数组所有元素的字符串,不改变原数组。
③查找
(1)indexof() 返回第一次出现被查找元素的下标。
(2)lastindexof() 返回最后一次出现被查找元素的下标。
④截取
(1)slice(start,end) 返回截取出来的数组,不改变原数组。
不传参时相当于数组复制,
传参时,如果start>end,返回空数组,正常时就返回截取的数组。
(2)splice(start,length,数值1...);返回截取的数组,改变原数组。
前2个参数必传,开始位置和长度。当长度为0时,会进行添加操作;当长度后面传值时,相当于替换;如果长度后面不传值,相当于删除。
⑤合并(concat())
不传值时,就是数组的复制
传值会将后面的值合并到原数组上 返回产生的新数组,不改变原数组。
4.数组的排序方法
①reverse() 将数组反转。 改变原数组。
var arr = [1, 2, 3, 4, 5];
console.log(arr.reverse()); //[5, 4, 3, 2, 1]
②sort() 根据传入的判定条件进行排序
不传入条件,使用ASCII顺序进行排序。
传入条件,如果输出正值:那么第一个值就放入第二个值的右边。
如果输出负值:那么第一个值就放入第二个值的左边。
var arr = [1, 2, 3, 4, 5];
var a = arr.sort(function(a, b) {
return b - a;
});
console.log(a); //[5, 4, 3, 2, 1]
5.数组的迭代器方法
①forEach() 对数组中的每一项运行给定条件,不产生新数组,没有返回值。
②map() 对数组中的每一项运行给定条件,产生新数组,返回每次函数调用的结果组成的数组。
③every() 默认值是false,对数组中的每一项运行给定条件,如果不满足就返回false;只有全部为true,才返回true。不产生新数组,返回值为Boolean值。
④some() 默认值是false,对数组中的每一项运行给定条件,只要有一次满足就返回true,否则就返回false。不产生新数组,返回值为Boolean值。
⑤filter() 必须传入一个判定条件(函数),不传会报错,对数组中的每一项运行给定条件,将满足条件的值放在一个数组中输出,产生新对象,返回一个新数组。
6.归并方法
①reduce(fn(),默认值) 归并就是合并,这里的意思是将数组里面的值合并为一个值。
传入2个参数,第一个是归并的方式(函数)(比如相加,相乘);第二个是首次传入的默认值。
var a = [1, 2, 23, 34, 5, 6, 78, 98, 900];
// previousValue 是上一次调用回调返回的值,第一次执行时是提供的初始值
// currentValue 是数组当前被出里的元素,第一次执行时是数组的度过值
// index 当前元素在数组中的索引
// array 调用 reduce 的数组
var n = a.reduce(function(previousValue, currentValu, index, array) {
return previousValue + currentValu;
}, 0);
console.log(a);
console.log(n);
7.判断是否为数组(isArray())
var b = [1, 2, 3, [], {}, null];
console.log(Array.isArray(b)); //true
ES6新增
1.扩展运算符(...) 将数组转为逗号分隔的参数序列
运用场景:
①Math.max()
--------ES5比较大小---------
let arr = [1, 23, 4, 5, 6, 7];
console.log(Math.max.apply(null, arr));
--------ES6比较大小---------
let arr = [1, 23, 4, 5, 6, 7];
console.log(Math.max(...arr));
②复制数组
let arr = [1, 23, 4, 5, 6, 7];
let copy = [...arr];
arr[0] = 9;
console.log(copy);//[1, 23, 4, 5, 6, 7]
③合并数组
let arr = [1, 23, 4, 5, 6, 7];
let arr1 = [9, 8, 7, 6, 5, 4];
let and = [...arr, ...arr1];
console.log(and); //[1, 23, 4, 5, 6, 7, 9, 8, 7, 6, 5, 4]
④与解构数组一起使用
2.Array.from() 将具有lentgh属性的对象(字符串)转换为数组。
[...arr]只能将具有iterator接口(遍历器接口)的对象转化为数组。
// ES5转数组
let arr1 = [].slice.call(arguments);
//ES6转数组
let arr2 = Array.from(arguments);
3.Array.of() 将传入的值转换为数组,默认值为空,弥补了在调用构造函数创建数组时,不能创建一个值的数组。
4.find(回调函数) 查找满足条件且首次出现的值,返回该值。
findIndex(回调函数) 返回改值的下标。
5.fill(填充元素,开始位置,结束位置) 向数组中填充元素 返回原数组。
6.includes() 判断一个数组是否含有该值,返回Boolean值。
7.flat() 扁平化数组,将数组里面的数组拉伸为一层或者多层,默认和不传参为一层。 产生一个新数组。
8.keys(),values(),entries()。返回一个遍历器对象。再用for..of..循环出数组。
keys(),返回下标。
values(),返回数组成员。
entries(),返回一个二维数组。