什么是数组
数组(array)是按次序排列的一组值。每个值的位置都有编号(从0开始),整个数组用方括号表示。
常规意义上的数组
数组是相同数据类型的元素的集合。数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。所以我们需要首先指定数组的大小;
提炼特点
1 数据类型相同
2 有序
3 在内存中连续存放
4 创建需指定大小
javaScript 数组
数组的创建
1 常规操作
var myArray = new Array();
var myArray = new Array(3);
var myArray = new Array(‘1’,‘2’,‘3’);
省略new操作符
var myArray = Array();
3 隐式创建-------数组字面量表示法(不会调用Array构造函数)
var myArray = [‘1’,‘2’,‘3’];
var myArray = [1,2,] //IE8
请问可不可以这样创建,myArray.length是多少
数组属性
length 数组长度
length 属性有一个非常有意思的特点就是他不是只读的
数组常用方法
delete 删除数组元素
用法:
const a = new Array(1,2,3,4)
delete a[2]
console.log(a.length)
console.log(a[2])
结果: 4 undefined
数组的长度不会改变只是删除对应位置的元素改为undefined
isArray判断是不是数组
用法 :Array.isArray([]) 参数放置要判断的元素,是数组返回true不是数组返回false
toString数组转化为字符串
用法 :a.toString()
join数组拼接成字符串
参数:一个字符串
返回值:拼接后的结果
const a = new Array(1,2,3,4)
const b = a.join("/")
console.log(b)
结果 1/2/3/4
push在数组末尾添加一个或多个元素
参数:要添加的元素
返回值:添加元素后数组的长度
const a = new Array(1,2,3,4)
a.push(11,22,33)
console.log(a)
结果 Array(7) [1, 2, 3, 4, 11, 22, 33]
unshift在数组开头添加一个或多个元素
参数:要添加的元素
返回值:添加元素后数组的长度
const a = new Array(1,2,3,4)
a.unshift('a','b','c')
console.log(a)
结果 Array(7) ["a", "b", "c", 1, 2, 3, 4]
pop删除数组末尾一个元素
参数:无
返回值:被删除的元素
const a = new Array(1,2,3,4)
const b = a.pop()
console.log(a)
console.log(b)
结果: Array(3) [1, 2, 3] 4
shift删除数组第一个元素
参数:无
返回值:被删除的元素
const a = new Array(1,2,3,4)
const b = a.shift()
console.log(a)
console.log(b)
结果: Array(3) [2, 3, 4] 1
reverse 倒置数组元素,会改变原数组
参数:无
返回值:倒置后的数组
const a = new Array(1,2,3,4)
const b = a.reverse()
console.log(a)
console.log(b)
结果: Array(4) [4, 3, 2, 1] Array(4) [4, 3, 2, 1]
slice(startIndex,endIndex)数组截取
注:在数组中,从startIndex下标开始一直截取到endIndex下标之前,不包含endIndex下标出的元素,不会改变原数组
参数:开始和结束下标
返回值:截取的数据数组
const a = new Array(1,2,3,4)
const b = a.slice(1,3)
console.log(a)
console.log(b)
结果:Array(4) [1, 2, 3, 4] Array(2) [2, 3]
splice(下标,个数,item1,item2,…)在数组中间添加或删除一些元素
注:将会改变原数组
参数:开始和结束下标
返回值:被删除的数据数组
const a = new Array(1,2,3,4)
const b = a.splice(1,3,"2","3","4")
console.log(a)
console.log(b)
结果:Array(4) [1, "2", "3", "4"] Array(3) [2, 3, 4]
concat()数组连接将多个数组拼接成一个数组
注:不改变原数组
参数:一个或多个数组或元素
返回值:拼接之后新的数组
const a = new Array(1,2,3,4)
const b = a.concat(55,[66,77],true)
console.log(a)
console.log(b)
结果:Array(4) [1, 2, 3, 4] Array(8) [1, 2, 3, 4, 55, 66, 77, true]
indexOf(item)从数组左侧开始查找第一次出现item的下标
参数:要查找的元素的值
返回值:如果查到了就返回下标值查不到就返回-1
const a = new Array(1,2,3,4)
const b = a.indexOf(2)
console.log(a)
console.log(b)
结果:Array(4) [1, 2, 3, 4] 1
const a = new Array(1,2,3,4)
const b = a.indexOf(5)
console.log(a)
console.log(b)
结果:Array(4) [1, 2, 3, 4] -1
lastIndexOf(item)从数组右侧开始查找对应第一次出现的item元素的下标值
参数:要查找元素
返回值:如果查到返回下标否则返回-1
const a = new Array(1,2,3,4)
const b = a.lastIndexOf(4)
console.log(a)
console.log(b)
结果:Array(4) [1, 2, 3, 4] 3
数组迭代方法
every检测数组所有元素是否都符合指定条件
注:不会对空数组进行检测,不会改变原始数组
参数:参数针对回调函数的参数 一个参数代表(数组元素),两个参数代表(数组元素,数组下标),三个参数代表(数组元素,数组下标,数组)
返回值:全部符合指定条件返回true,某个不符合条件返回false
const a = new Array(22,23,33,44)
function callBack(a,b,c){
console.log(a,b,c)
return a>10
}
const b = a.every(callBack)
console.log(b)
结果 22 0 Array(4) [22, 23, 33, 44]
23 1 Array(4) [22, 23, 33, 44]
33 2 Array(4) [22, 23, 33, 44]
44 3 Array(4) [22, 23, 33, 44]
true
注意:执行到不满足条件时将不继续向下执行直接返回false
const a = new Array(23,33,22,44)
function callBack(a,b,c){
console.log(a,b,c)
return a>22
}
const b = a.every(callBack)
console.log(b)
结果:23 0 Array(4) [23, 33, 22, 44]
33 1 Array(4) [23, 33, 22, 44]
22 2 Array(4) [23, 33, 22, 44]
false
filter对数组中的每一项运行给定函数,返回该函数返回true的项组成的数组。不会改变原数组。
参数:参数针对回调函数的参数 一个参数代表(数组元素),两个参数代表(数组元素,数组下标),三个参数代表(数组元素,数组下标,数组)
返回值:返回true的项组成的数组
const a = new Array(23,33,22,44)
function callBack(a,b,c){
console.log(a,b,c)
return a>22
}
const b = a.filter(callBack)
console.log(b)
结果:23 0 Array(4) [23, 33, 22, 44]
33 1 Array(4) [23, 33, 22, 44]
22 2 Array(4) [23, 33, 22, 44]
44 3 Array(4) [23, 33, 22, 44]
Array(3) [23, 33, 44]
forEach对数组中的每一项运行给定函数,这个方法没有返回值,不会改变原数组
参数:参数针对回调函数的参数 一个参数代表(数组元素),两个参数代表(数组元素,数组下标),三个参数代表(数组元素,数组下标,数组)
返回值:没有返回值
const a = new Array(23,33,22,44)
let sum = 0
function callBack(a,b,c){
console.log(a,b,c)
sum = sum + a
}
const b = a.forEach(callBack)
console.log(a)
console.log(sum)
结果:23 0 Array(4) [23, 33, 22, 44]
33 1 Array(4) [23, 33, 22, 44]
22 2 Array(4) [23, 33, 22, 44]
44 3 Array(4) [23, 33, 22, 44]
Array(4) [23, 33, 22,44]
122
map对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组
注:不会改变原数组
参数:参数针对回调函数的参数 一个参数代表(数组元素),两个参数代表(数组元素,数组下标),三个参数代表(数组元素,数组下标,数组)
返回值:返回每次函数调用的结果组成的数组
const a = new Array(23,33,22,44)
function callBack(a,b,c){
console.log(a,b,c)
return a*2
}
const b = a.map(callBack)
console.log(a)
console.log(b)
结果:23 0 Array(4) [23, 33, 22, 44]
33 1 Array(4) [23, 33, 22, 44]
22 2 Array(4) [23, 33, 22, 44]
44 3 Array(4) [23, 33, 22, 44]
Array(4) [23, 33, 22,44]
Array(4) [46, 66, 44, 88]
some对数组中的每一项运行给定函数,只要其中有一项返回true,则返回true,与every()相反。
注:不会对空数组进行检测,不会改变原始数组
参数:参数针对回调函数的参数 一个参数代表(数组元素),两个参数代表(数组元素,数组下标),三个参数代表(数组元素,数组下标,数组)
返回值:全部不符合指定条件返回false,某个符合条件返回true
const a = new Array(23,33,22,44)
function callBack(a,b,c){
console.log(a,b,c)
return a>22
}
const b = a.some(callBack)
console.log(a)
console.log(b)
结果:23 0 Array(4) [23, 33, 22, 44]
Array(4) [23, 33, 22, 44]
true
归并算法
reduce这个函数返回的任何值都会作为第一个参数自动传递给下一项
若不指定初始值则初始值为数组第一个元素,同时数组循环从下标1开始
参数(callback,初始值),callback(初始值,数组元素,数组下标,数组)
指定初始值为0
const a = new Array(23,33,22,44)
function callBack(a,b,c,d){
console.log(a,b,c,d)
return a+b
}
const sum = a.reduce(callBack,0)
console.log(a)
结果:0 23 0 Array(4) [23, 33, 22, 44]
23 33 1 Array(4) [23, 33, 22, 44]
56 22 2 Array(4) [23, 33, 22, 44]
78 44 3 Array(4) [23, 33, 22, 44]
Array(4) [23, 33, 22, 44]
122
不指定初始值
const a = new Array(23,33,22,44)
function callBack(a,b,c,d){
console.log(a,b,c,d)
return a+b
}
const sum = a.reduce(callBack)
console.log(a)
console.log(sum)
结果:23 33 1 Array(4) [23, 33, 22, 44]
56 22 2 Array(4) [23, 33, 22, 44]
78 44 3 Array(4) [23, 33, 22, 44]
Array(4) [23, 33, 22, 44]
122