补充(数组的存储结构)
1、基本数据类型变量都存储在栈区域
2、引用变量或对象名存储在栈区域
3、复杂数据类型存储在堆区域,赋值时是将对象在堆区域地址赋值给变量或对象
数组常用的方法
1、push(在数组的最后面追加元素)
数组名.push()
2、pop(把数组的最后一位元素弹出,相当于删除)
数组名.pop()
3、unshift(数组最前面添加元素)
数组名.unshift()
4、shift(删除数组最前面的元素)
数组名.shift()
5、splice(下标,个数,参数)
数组名.splice(下标,个数,参数)
(1)、只有前面两个参数时:从下标开始删除,个数为几就删除几个。
(2)、有三个参数时:第三个参数时把之前的值换成第三个参数的值。
6、reverse(元素倒着显示,最后一个显示在第一个位置,以此类推)
数组名.reverse()
7、sort(排序默认由低到高,默认排序规则:按照字符串编码unicode码)
数组名.sort()
可以自己去改变排序的规则
8、concat (是把多个数组进行拼接)
最后的结果为arr6=[1,2,3,4,5,6]
9、join (是把数组里面的每一项内容链接起来,变成一个字符串)
10、slice( 方法返回一个新的数组对象,这一对象是一个由 begin 和 end 决定的原数组的浅拷贝(包括 begin,不包括end)。原始数组不会被改变。)
11、indexOf(返回索引号)
判断是否有这个元素
说明:如果元素不存在,返回-1
12、includes(判断数组是否有某个元素)
ES5常用数组遍历方法
forEach
匿名函数
数组名.forEach(function(item,index,变量名){
第一个形参:item 数组元素
第二个形参:index 是索引号
第三形参:变量名
})
例题:
//求最大值
var arr=[87,87,89,98,99,100]
var max=0
arr.forEach(function(item,index){
if(item>max){
max=item
}
})
console.log('最大值是:',max)
map
语法
var newArr=数组名.map(function(item,index,变量名){
第一个形参:item 数组元素
第二个形参:index 是索引号
第三形参:变量名
return 新元素
})
例题
//arr中的所有元素都减10
var arr=[99,94,78,43,79]
var newArr=arr.map(function(item){
return item-10
})
console.log(newArr)//结果为:[89,84,68,33,69]
filter
语法
var newArr=数组名.filter(function(item,index,变量名){
第一个形参:item 数组元素
第二个形参:index 是索引号
第三形参:变量名
return 条件
})
例题
//找大于70分的成绩
var arr=[34,78,97,56]
var newArr=arr.filter(function(item){
return item>70
})
console.log(newArr)
find
作用:查找第一个满足条件的元素,找到就结束
语法
var newArr=数组名.find(function(item,index,变量名){
第一个形参:item 数组元素
第二个形参:index 是索引号
第三形参:变量名
return 条件
})
例题
//找大于70分的成绩
var arr=[34,78,97,56]
var newArr=arr.find(function(item){
return item>70
})
console.log(newArr) //显示结果为78,后面的不会去执行
every (相当于与 &&)
作用:1.遍历数组
2.查找数组元素是否全部满足条件,全部满足条件返回true,否则为false
例题
//判断是否所有的学生成绩都及格
var arr=[34,78,97,56]
var isOK=arr.every(function(item){
return item>60
})
console.log(newArr)
some (相当于或 ||)
作用:数组中是否有元素满足指定的条件,只要有一个满足返回true
例题
//查找是否有不及格的学生,有返回true
var arr=[34,78,97,56]
var newArr=arr.some(function(item){
return item<60
})
console.log(newArr)
reduce
语法
数组名.reduce(function(previousValue,currentValue,currentIndex,原数组){
//previousValue上一个值,如果initValue存在,第一次遍历时previousValue就是initValue
//currentValue当前数组元素
//currentIndex当前数组索引号
},[initValue])
例题:
//累加求和
var arr=[766,53,68,86,97]
var sum=arr.reduce(function(previousValue,currentValue){
return previousValue+currentValue
},0)
console.log('累加求和:',sum)
数组的排序
冒泡排序
算法思想:相邻的两个数,两两比较,如果前面的数大于后面的数,就交换位置,第一轮比较完,最大数到最后面。
第二轮重复上述操作,找到第二大的数,以此类推。
1、n个数排序,进行n-1轮冒泡排序
2、每一轮循环有n-1-i次循环
var arr=[75,35,78,64,26]
//外层循环冒泡轮数
for(var i=0;i<arr.length-1;i++){
//内层循环,两两比较交换位置
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
}
}
}