一、创建
直接量方式:
var arr=[]
var arr=[数据1,数据2,...]
构造函数方式:
var arr=new Array()
var arr=new Array(数据,...)
二、访问
数组[i]
三、后续添加/替换元素
数组[i]=数据
是添加还是替换,具体看i位置有没有数据
四、数组具有三大不限制
1.不限制元素个数
2.不限制元素类型
3.不限制下标越界
获取元素时,如果下标越界,会得到undefined,追加元素时,如果下标越界,会得到一个稀疏数组
五、属性
数组名.length
三个固定套路:
1.向末尾添加元素:arr[arr.length]=数据
2.获取数组倒数第n个元素:arr.[arr.length-n]
3.删除数组倒数n个元素:arr.length-=n
六、遍历数组
方法一:
for(var i=0;i<arr.length;i++){
arr[i]
}
方法二:
直接修改原数组
arr.forEach(function(val,i,arr){
val:当前值 i当前值的下标 arr数组本身
操作;
})
方法三:
不修改原数组,返回一个新数组
var newArr=arr.map(function(val,i,arr){
val:当前值 i当前值的下标 arr数组本身
return 操作;
})
方法四:
for(var i in 数组名){
数组名[i]
}
七、数组的API
1.数组转为字符串
不改变原数组,返回一个新数组,需要拿个变量去接
语法:var str=arr.join("自定义连接符")
1.1 笔试题:将数组里里面的内容拼接为一句话:arr.join("")
例:
var arr=["h","e","l","l","o","w","o","r","l","d"]
var newArr=arr.join("")
console.log(newArr)
1.2 将数组里面的数据拼接为DOM页面元素
var str="<option>"+arr.join("</option><option>")+"</option>"
例:
var arr=["北京","南京","东京"]
var str="<option>"+arr.join("</option><option>")+"</option>"
var select=document.createElement("select")
select.innerHTML=str
var body=document.getElementsByTagName("body")[0]
body.appendChild(select)
2.拼接数组
不改变原数组,返回一个新数组,需要拿个变量去接
语法:var newArr=arr.concat(新值1,...)
根据传入的实参全部拼接到数组末尾
支持传入数组,但是会打散放入
3.截取子数组
3.1 不改变原数组,返回一个新数组,需要拿个变量去接
3.2 语法:var subArr=arr.slice(starti,endi+1)
3.3 特殊:
含头不含尾,
endi可以省略不写,会从starti一直截取到末尾
endi和starti都可以省不写,从头截到尾-深拷贝
支持负数,-1代表截取倒数第一个
4.删、插、替
直接修改原数组
删除:
var dels=arr.splice(starti,n),n代表删除的个数
特殊:splice也有返回值,返回的是删除元素组成的数组
插入:
arr.splice(starti,0,新值1,...)
特殊:原starti位置的元素及后续元素都会向后顺移
替换:
var dels=arr.splice(starti,n,新值1,...)
特殊:插入的个数和删除的个数不必相等
5.反转数组
直接修改原数组
arr.reverse()
6.数组排序
6.1 冒泡排序
思路:从第一个元素开始,依次比较相邻的两个元素,如果前一个大于后一个,两者就交换位置
公式:
for(var i=0;i<arr.lenth-1;i++){
for(var j=0;j<arr.lenth-1;j++){
if(arr[i]>arr[i+1]){
var m=arr[i]
arr[i]=arr[i+1]
arr[i+1]=m
}
}
}
6.2 sort
直接修改原数组
arr.sort(function(){
return a-b
})
a代表后一个数,b代表前一个数,a-b代表升序,b-a代表降序
如果数组是字符串,arr.sort()排序即可
7.栈和队列
栈:
shift/unshift
unshift:从数组前面添加元素,缺点:导致其余元素下标发生变化
arr.unshift(新值,...)
shift:从数组前面删除元素,一次只能删除一个,返回值为被删除的元素
arr.shift()
栈:
push/pop
push:从数组后面追加元素
arr.push(新值,...)
pop:从数组后面删除元素,,一次只能删除一个,返回值为被删除的元素
arr.pop()
队列:
开头进,结尾出:arr.unshift() arr.pop()
队列:
结尾进,开头出:arr.push() arr.shift()
8.判断
8.1 every
每一个,理论等效于&&,全部满足结果才为true,只要一个不满足,结果就为false
var bool=arr.every(function(var,i,arr){
val:当前值 i当前值的下标 arr数组本身
return 条件(必写的)
如果没有写return,默认返回return undefined,那一来就为false
})
例:
var arr=[1,2,3,4,5,6]
var bool=arr.every(function(val,i,arr){
return val>3
})
console.log(bool)=false
8.2 some
每一个,理论等效于||,全部不满足结果才为false,一个满足,结果就为true
var bool=arr.some(function(var,i,arr){
val:当前值 i当前值的下标 arr数组本身
return 条件(必写的)
})
例:
var arr=[1,2,3,4,5,6]
var bool=arr.some(function(val,i,arr){
return val>5
})
console.log(bool)=ture
9.过滤和汇总
过滤:根据你的条件筛选出你需要的部分,不会修改原数组
var subArr=arr.filter(function(val,i,arr){
return 条件
})
例:
var arr=[1,2,2,3,5,6]
var subArr=arr.filter(function(val,i,arr){
return val>3
})
console.log(subArr)=[5,6]
汇总:把元素汇总到一起
var sum=arr.reduce(function(prev,val,i,arr){
return prev+val
prev:相当于我们平时用的sum,初始值为0
},基础值)
例:
var arr=[1,2,2,3,5,6]
var sum=arr.reduce(function(prev,val,i,arr){
return prev+val
},10)
console.log(sum)=29
八、hash数组
1.概念:下标可以自定义的数组
2.创建:
先创建一个空数组,var arr=[]
为空数组添加自定义下标和内容:arr["自定义下标"]=新值
3.访问:arr["自定义下标"]
4.强调:hash数组的长度永远为0
5.遍历:因为长度为0,只有用for in 循环
for(var i in 数组名){
数组名[i]
}
6.hash数组的原理:
hash算法:将字符串计算成一个尽量不重复的数字(地址值),如果字符串内容相同,则计算出来的数字也相同
添加元素:将自定义算法交给hash算法,就会得到一个数字(地址值),将你要保存的 数据放到了此地址
获取元素:将指定的自定义下标交给hash算法,得到一个和当初添加元素时一样的数字,然后找到保存的数据
js里万物皆对象(除了null和undefined),一切对象的底层都是hash数组
九、二维数组
1.概念:数组内引用着另外的数组
2.创建:
var arr=[ ["lucy",18,3500]
["ali",19,4500]
["jac",20,5000]
]
3.访问:arr[行下标][列下标]
4.特殊:行下标越界会得到undefined,列下标越界会报错,因为只有数组才可以使用[下标],
行下标越界已经得到undefined,就没有资格再使用[下标]
5.遍历:必然需要两层循环,外层控制行,内层控制列
for(var i=0;i<arr.length;i++){
for(var j=0;j<arr.length;j++){
arr[i][j]
}
}