一、数组的存储结构
1.基本数据类型变量都存储在栈区域
2.引用变量存储在堆区域,如对象。
3.复杂数据类型是存储在堆区域,赋值时是将对象在堆区域的地址赋值给变量
4.- 因为复杂数据类型,变量存储的是地址,真实内容在 堆空间 内存储
- 所以赋值的时候相当于把 obj 存储的那个地址复制了一份给到了 obj1变量
现在 obj 和 obj1 两个变量存储的地址一样,指向一个内存空间
- 所以使用 obj1 这个变量修改空间内的内容,obj 指向的空间也会跟着改变了
二、数组的常用方法
数组对象:属性和方法
var arr=[10,20,30]
arr.length属性
方法:
1.push==>向数组末尾追加元素
var arr=[10,20,30]
arr.push(40)------->向数组中追加元素40
2.pop==>删除数组末尾的一个元素
arr.pop()
3.unshift==>在数组头部追加一个数
arr.unshift(32)
4.shift==>删除数组最前面的数
arr.shift()
5.splice==>删除任意的元素==》splice(下标,元素个数)
arr.splice(1,2)---->表示从下标1开始,删除两个元素
截取数据:arr.splice(1,1,50)---->表示截取下标为1的元素换成50
6.reverse==>反转数组
arr.reverse()
7.sort==>把数组排序,默认由高到低,排序规则:先转成字符串,使用字符编码unicode码排序
负数升序排序(a-b),正数降序(a+b)
var arr=[17,20,30,45,67,89]
var fun=function(a,b){
if(a<b){
return -1}
if(a>b){
return 1}
if(a=b){
return 0}
}arr.sort(fun)
8.concat==>把多个数组拼接在一起
var arr=[1,2,3,4]
var arr1=[5,6,7,8]
var arr3=arr.concat([5,6,7,8])
9.join==>把数组的每一项内容连接起来,变成字符串
var arr=[1,2,3,4]
var str=arr.join('-')
10.slice==>返回一个新数组,这一对象是由begin和end决定的元数组的浅拷贝,原始数组不会变。【只包括开始不包括结束】
var arr=[1,2,3,4]
console.log(arr.slice(2,4))----->输出值为2,3不包括4
11.indexof===>用来找到数组中某一项的下标--》如果元素不存在,则返回-1
arr.indexof()
12.includes==>检测数组是否包含要找的数,找不到就返回flase
arr.includes()
可以利用【indexOf==-1和includes==flase来解决一些问题】
三、ES5常用的数组遍历方法
1.forEach()方法
arr.forEach(function(item,index){
console.log(index,item))}
有三个参数:function(数组元素,索引号,原数组)
var arr=[98,78,88,95,76,66,56]
//1.forEach()方法
arr.forEach(function(item,index){
console.log('index'+' '+index+' '+'item'+' '+item)
})
2.map===>遍历数组可以得到一个新的数组
arr.map(function(item){
return 新元素
})
//2.map---->遍历数组,可以得到一个新的数组
var newMap=arr.map(function(item){
return item-10
})
3.filter==>把原始数组中满足条件的筛选出来,组成一个新的数组返回
//3.把原始数组中满足条件的筛选出来,组成一个新的数组返回
//查找大于60的数
var newFilter=arr.filter(function(item){
return item>60
})
console.log(newFilter)
4.find===>找到满足条件的第一个数就返回,并结束。
//4.遍历数组,找到第一个满足条件的元素就返回
//找到一个大于90的数就返回,并结束
var newFind=arr.find(function(item){
return item>90
})
console.log(newFind)
5.every==>判断所有元素是否满足条件,如果全都满足返回ture,有一个元素不满足就返回false
//5.every,判断所有元素是否满足元素,如果全部满足就返回ture,如果有一个不满足就返回false
var newEvery=arr.every(function(item){
return item>60
})
console.log(newEvery)
6.some==>只要有一个满足条件就为ture
//6.some,只要满足一个条件就为ture
var newSome=arr.some(function(item){
return item<60
})
console.log(newSome)
7.reduce()方法
reduce(callFun,[initvalue])
callFun:function(previousvalue(初值),currentvale(当前数组元素),currentIndex(当前数组下标),arr(原数组))
应用累加求和
var sum=arr.reduce(function(s(初值),item,index){
return s+item
},0)
console.log(sum)
var sum=arr.reduce(function(previousvalue,currentvalue){
return previousvalue+currentvalue
},0)
console.log(sum)
冒泡排序:
//n个数进行n-1轮比较
//利用冒泡排序,将数组进行升序排序
var arr=[98,68,88,66,90,48,32,12,10]
for(var i=0;i<arr.length-1;i++){j
//外层循环表示比较的轮数,n个数进行n-1轮比较
for(var j=0;j<arr.length-1-i;j++){
//内层循环表示两两交换
if(arr[j]>arr[j+1]){
var temp=arr[j]
arr[j]=arr[j+1]
arr[j+1]=temp
}
}
}
console.log('排序后的数:'+arr)
</script>