一、数组
1、数组的定义
数组是可以保存任意类型的数据集合
(1)构造函数方式实现
var a1=new Array() "空"数组
(2)直接量实现
var a1=[]
2、数组的数据操作
(1) a1[0]= 赋值
a1[0] 提取值
var a1=[]
a1=“hello”
var a1=[“a”,“b”,“c”]
console.log(a[1]) //b
(2) var a1=new Array() 可以指定长度
a1[0] --undefined
var a2=[,,,,,] 长度是5,最后一个都不算
3、数组的遍历
(1)var a1=[21,32,43,54] 下标由0开始
for(var i=0;i<a1.length;i++){
console.log(a1[i])
}
(2) for in
for(var i in a1){
console.log(a1[i])
}
4、数组的添加与删除
push() 数组尾部增加数据,对原数组进行修改,返回修改后的数组长度
pop() 删除数组尾部一个元素,对原数组进行修改,返回被删除的元素
unshift() 头部增加元素,对原数组进行修改,返回修改后的数组长度
shift() 删除数组头部一个元素,对原数组进行修改,返回被删除的元素
var a1=[31,56,12]
a1.push[88] //[31,56,12,88]
a1.pop() //[31,56,12]
a1.pop() //[31,56]
a1.unshift() //[88,31,56,12]
a1.shift() //[31,56,12]
a1.shift() //[56,12]
二、数组方法
1、reverse():对原数组进行反转
var a1=[23,12,56,34]
a1.reverse() //[34, 56, 12, 23]
2、join:指定分隔符,将数组转换为字符串,生成新的字符串
var a1=“he,ll,oo,mm”
字符串转数组
var a2=a1.split(“,”) //[he,ll,oo,mm]
数组转字符串
a2.join(“”) //helloomm
a2.join(“3”) //he3ll3oo3mm
3、concat
连接数组,将数据加到末尾
不修改原数组,生成新数组
只能打散一维数组,不会打散数组中包含的数组
a1=[1,2,3]
a2=[4,5,6]
a1.concat(a2) //[1, 2, 3, 4, 5, 6]
a1.concat(55,66) //[1, 2, 3, 55, 66]
a1.concat([33,88],[44,77]) //[1, 2, 3, 33, 88, 44, 77]
a1.concat([[11,22]],[33,44],“abc”) //[1, 2, 3, [11, 22], 33, 44, ‘abc’]
4、slice:截取子数组
(1)不修改原数组,生成新数组
(2)a2=a1.slice(2,4) 起始包含,终止不包含
(3)a2=a1.slice(2) 从起始到数组末尾
(4)a2=a1.slice(-4,-2) 如为负数从右到左截取
var a1=[12,34,45,67,89]
a2=a1.slice(2,4) //[45, 67]
a2=a1.slice(2) //[45, 67, 89]
a2=a1.slice(2,10) //[45, 67, 89]
a2=a1.slice(-4,-2) // [34, 45]
5、splice:增加和删除数组元素
splice(arg1,arg2,arg3…)
arg1 --起始位置
arg2 --被删除的元素个数
arg3及后面所有参数—要插入的元素
a1=[1,2,3,4,5,6,7]
a1.splice(1,2,3,4,5) //a1–[1, 3, 4, 5, 4, 5, 6, 7]
a2=a1.splice(2) //a1–[1,2] a2=[3,4,5,6,7]
如只有一个参数,从起始位置删除后面所有的元素,
修改原数组,返回被删除的元素
a1.splice(2,2) //a1–[1,2,5,6,7] a2=[3,4]
a1.splice(2,0) //a1–[1,2,3,4,5,6,7] a2=[]
a1.splice(2,0,0,0,0) //a1=[1, 2, 0, 0, 0, 3, 4, 5, 6, 7]
a1.splice(6,2,3,4) //a1=[1,2,3,4,5,6,3,4] a2=[7]
a1.splice(-2,-3,6,7,8)//如果第一个参数为负数,则从右到左查找
如第二个参数为负数,按0处理
a1=[[1, 2, 3, 4, 5, 6, 7, 8, 6, 7]]
6、数组删除
splice
delete:删除元素本身,不删除空间,不改变数组大小
console.log(a1) //[空, 4, 5]
console.log(a1.length) //3
五、数组下标
var a1=[4,5,6,7]
1.a1[0] 0 --下标
2.范围 大于0,小于2^32-1 整数
3.如下标是负数、浮点数、布尔型等,js会自动将其转换为字符串
var a1=[4,5,6,7]
a1[true] //undefined
w1={name:zs}
w1[name]
a1={true:}
a1[-2] //undefined
a1[2.3] //undefined
4、下标是可以不断递增的表达式
var a1=[]
for(var i=0;i<10;i++){
a1[i++]=i
}
—1,空,3,空,5,空,7,空,9
六、排序
数组.sort(比较函数)
比较函数--具有两个参数,f1(a,b)
函数只判断返回值
返回值大于0 a排在b的后面
返回值小于0 a排在b的前面
返回值等于0 a,b不动
1.var a1=[23,4,5,12,78,16]
a1.sort() //[12, 16, 23, 4, 5, 78]
2.var a1=[23,4,5,12,78,16]
function f1(a,b){
//return a-b
if(a-b>0){
return 1 a在b的后面
}else if(a-b<0){
return -1 a在b的前面
}else{
return 0 a,b不动
}
}
a1.sort(f1) //[4, 5, 12, 16, 23, 78]
七、数组函数
1、indexOf()
返回数组中第一个找到的元素的位置,不存在返回-1
a1=[“ab”,23,45,67]
a1.indexOf(“ab”) //0
2、forEach
数组.forEach(function(当前元素值,当前元素索引,数组对象){})
var a1=[4,5,6,7,8]
a1.forEach(function(item,index,arr){
console.log(item,index) //元素+索引
console.log(item,index,arr)// 元素+索引+数组本身
})
//前后台数据传输格式 ajax 数据
var data1=[{“name” : “zs”,“age”:23,“number”:“00123”},
{“name” : “ls”,“age”:32,“number”:“00124”},
{“name” : “ww”,“age”:30,“number”:“00125”}]
//data 1遍历
var max=0
var i=0
data1.forEach(function(item,index,arr){
console.log(“名字”+data1[index].name+“年龄”+data1[index].age+“学号”+data1[index].number)
max+=item.age
})
console.log(“平均年龄”+parseInt(max/data1.length))
3、map
对数组每一项进行遍历
数组.map(function(当前元素值,当前元素索引,数组对象){})
a1=[3,4,5,6] 生成 a2=[6,8,10,12]
var a2=a1.map(function(item,index,arr){
return item*2
})
****map与forEach区别
1、forEach只是遍历,map可以生成新数组
2、map比forEach速度快
3、map可以进行链式操作
var a1=[3,4,5,6]
var a2=a1.map(function(item,index,arr){
return item2
}).map(function(item1){
return item110
})
console.log(a2)
4、filter 数据过滤
(1)返回新数组,不对原数组修改
(2)对返回true的结果过滤,false的结果忽略
arr.filter(function(当前元素值,当前元素索引,数组对象){})
a1=[10,30,40,60,80] 提取大于30的数据
a1.filter(function(item,){
return item>30
})
5、reduce
接收一个函数作为累加器,数组中的每一个值从左到右开始缩减
最终计算为一个值
arr.reduce(function(初始值,当前元素值,当前元素索引,数组对象){},初始值(可省略))
6、some 判断数组是否有满足条件的元素
(1)arr.some(function(当前元素值,当前元素索引,数组对象){})
(2)函数内部,返回true,找到了满足条件的元素,则循环结束
返回false,没有找到,循环继续
(3)函数的执行次数不一定等于数组的长度
a1=[10,30,5,60] 判断数组是否有大于20的元素
a1.some(function(item,index,arr){
return item>20
})
a2—true
7、every 检查数组中所有元素是否都满足条件
(1)arr.every(function(当前元素值,当前元素索引,数组对象){})
(2)有一项不满足就返回false,都满足返回true
(3)函数的执行次数不一定等于数组的长度
a1=[10,30,60] 判断数组是否都大于0
a1=[10,30,60]
a2=a1.every(function(item,index,arr){
return item>0
})
console.log(a2) //true