数组
一、什么是数组?
存储一组或一系列相关数据的容器。
二、数组的好处?
数组集中管理,提高性能
三、数组元素
存储在数组中的数据
四、数组下标
能够唯一标识一个容器的索引号
下标从0开始,到数组的长度减1.
五、数组属性
length:数组长度
六、如何声明数组
- 字面量 :[]
无论[]中写什么,都是这个数组的元素。 - 构造函数的方式:new Array()
(1)如果仅有一个参数且是正整数时,表示这个数组的长度
(2)如果仅有一个参数且是小数或者是负数时,会报错
(3)如果有多个参数或者是非数字类型(写的时候要加引号),则表示数组元素。
七、如何给数组赋值
- 初始化数组
- 先声明,后赋值
注:操作数组空间,都要使用循环遍历数组(记得下标从0开始遍历)
八、数组方法(增删改截拼复排转)
1.增
前增unshift
unshift(元素,元素,……)
作用:在数组的前面增加元素(一个数组按一个元素增加)
返回值:新增后数组的长度
是否会影响原对象:是
var arr = [true,false,null];
console.log(arr.unshift(9,8,7,[6,5,4],3)); //8
console.log(arr);//[9,8,7,[6,5,4],3,true,false,null]
后增push
push(元素,元素,……)
作用:在数组的后面增加元素(一个数组按一个元素增加)
返回值:新增后数组的长度
是否会影响原对象:是
var arr = [true,false,null];
console.log(arr.push(9,8,7,[6,5,4],3)); //8
console.log(arr);//[true,false,null,9,8,7,[6,5,4],3]
2.删
前删shift()
shift()
作用:删除数组前面的一个元素(一次只能删除一个元素)
返回值:被删除的元素
是否会影响原数组:是
var arr = [true,false,null];
console.log(arr.shift()); //true
console.log(arr);//[false,null]
后删pop()
pop()
作用:删除数组后面的一个元素(一次只能删除一个元素)
返回值:被删除的元素
是否会影响原数组:是
var arr = [true,false,null];
console.log(arr.pop()); //null
console.log(arr);//[true,false]
3.改splice
splice(start,dellength,ele,ele,ele,……)
作用:可以在数组的任意位置进行增、删、改的操作。
返回值:被删除的元素数组
是否会影响原数组:是
var arr = [1,2,3,4,5,6,7,8,9,99];
console.log(arr.splice(5)); //[6, 7, 8, 9, 99]
console.log(arr);// [1, 2, 3, 4, 5]
var arr = [1,2,3,4,5,6,7,8,9,99];
console.log(arr.splice(5,2)); //[6, 7]
console.log(arr);// [1, 2, 3, 4, 5, 8, 9, 99]
var arr = [1,2,3,4,5,6,7,8,9,99];
console.log(arr.splice(5,2,true)); //[6, 7]
console.log(arr);// [1, 2, 3, 4, 5, true,8, 9, 99]
4.截slice
slice(start,end)
作用:截取数组中的部分元素。
返回值:截取到的新数组
是否会影响原数组:否
var arr = [1,2,3,4,5,6,7,8,9,99];
console.log(arr.slice(4)); //[5, 6, 7, 8, 9, 99]
console.log(arr);// [1,2,3,4,5,6,7,8,9,99]
var arr = [1,2,3,4,5,6,7,8,9,99];
console.log(arr.slice(4,6)); //[5, 6]
console.log(arr);// [1,2,3,4,5,6,7,8,9,99]
var arr = [1,2,3,4,5,6,7,8,9,99];
console.log(arr.slice(-6,-4)); //[5, 6]
console.log(arr);// [1,2,3,4,5,6,7,8,9,99]
5.拼concat
concat(ele,ele,……)
作用:将新的元素拼接到指定数组的后面。(如果元素是数组,展开最外层数组,将里面的元素进行拼接)
返回值:拼接后的新数组
是否会影响原数组:否
var arr = [1,2,3];
console.log(arr.concat(true,[4,5,[6,7,8],9])); //[1, 2, 3, true, 4, 5, Array(3), 9]
console.log(arr);// [1,2,3]
6.复(面试题 :要求至少写出两种复制数组的方法)
function copyArr(arr){
return arr.slice(0);
}
function copyArr(arr){
return arr.concat();
}
function copyArr(arr){
var list = [];
for(var i = 0,len = arr.length;i < len;i ++){
list.push(arr[i]);
}
return list;
}
7.排reverse() sort()
- reverse() :
作用:将数组元素逆序存放
返回值:逆序后的数组
是否会影响原数组:是
var arr = [5,3,6,2,7];
console.log(arr.reverse());//[7, 2, 6, 3, 5]
console.log(arr);//[7, 2, 6, 3, 5]
- sort()
作用: 按字符编码排序
返回值:排序后的数组
是否影响原数组:是
var arr = [5,3,6,10,100,2,7];
console.log(arr.sort());//[10, 100, 2, 3, 5, 6, 7]
console.log(arr);//[10, 100, 2, 3, 5, 6, 7]
sort(function(a,b){return a - b;}) 按数字从小到大排
sort(function(a,b){return b - a;}) 按数字从大到小排
8.转toString() join
- toString() (面试: 它不是数组的方法,是Object对象的方法)
1> 数字.toString(2~36) : 将数字转为指定进制的字符串
2> 数组转字符串 - join(‘连接符’);
作用:将数组连接成以指定连接符的字符串
返回值:转换后的字符串
是否会影响原数组:否
//转toString()
//(面试,它不是数组的方法,是Object对象的方法)
// (1)数字.toString(2-36);将数字转为指定进制的字符串
var num = 100;
console.log( num.toString(8));
console.log(num);
// (2)将数字转为字符串
arr = [1,5,66,4,true,'六'];
console.log(arr.toString());
console.log(arr);
//join('连接符')
//将数字连接成以指定连接符连接的字符串
console.log(arr.join('-'));
console.log(arr);
alert(arr);
总结 不影响原数组的方法:截、拼、转
九、整数数组、字符串数组、对象数组、二维数组、多维数组
[1,2,3,4,5]
['a','b','c']
[{},{},{}]
[[],[],[],[]]
var arr = [[[[5]]]];
console.log(arr[0][0][0][0])
十、for in (只能遍历对象)
语法:
for(变量 in 对象){ //循环变量不能赋值,遍历数组时,变量代表下标。遍历对象时,变量代表key
语句组;
}
ar arr = [1,2,3,4];
for(var i in arr){
console.log(i,arr[i]);
}
var obj = {id : 1,name : '苹果',pirce : 50,num : 8};
//遍历对象
for(var key in obj){
console.log(key,obj[key]);
}
十一、冒泡排序
冒泡排序:相邻的两个数进行比较,符合条件,交换位置。
<script>
/*
冒泡排序 相邻的两个元素进行比较,符合条件,交换位置
*/
arr = [5,3,8,10,6,9];
//从大到小
//第一个for,比较一圈确定一个数
// for(var i = 0;i < arr.length;i ++){
// //第二个for,相邻元素比较 n个数,比较n-1次,最后一个数不用再和后面的数比 ,第一圈比较完一,确定一个数,这个数就不用再比较了,第二圈比较完一,又确定一个数,......,比较的长度为arr.length-i
// for(var j = 0;j < arr.length - i;j ++){
// //比较一圈确定一个最小的数,排到了末尾
// if(arr[j] < arr[j + 1]){
// //符合条件 交换
// var t = arr[j + 1];
// arr[j + 1] = arr[j];
// arr[j] = t;
// }
// }
// }
// console.log(arr);
//从小到大
for(var i = 0;i < arr.length;i ++){
for(var j = 0;j <= arr.length - 1;j ++){
if(arr[j] > arr[j + 1]){
var t = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = t;
}
}
}
console.log(arr);
</script>
应用案例
- 成绩管理系统(求出总成绩、平均成绩、最高成绩、最低成绩、成绩从高到低排序)
<script>
// 十一、成绩管理系统(求出总成绩、平均成绩、最高成绩、最低成绩、成绩从高到低排序)
var num = parseInt(prompt('请输入班级人数:'));
var arr = [];
function fnInput(arr,num){
for(var i = 0;i < num;i++){
arr[i] = Number(prompt('请输入第' + (i + 1) + '个学生的成绩:')) ;
console.log(arr);
}
return arr;
}
function fnSum(arr){
var sum = 0;
for(var i = 0,len = arr.length;i < len;i ++){
sum += arr[i];
}
return sum;
}
function fnAvg(arr,num){
return (fnSum(arr)/num).toFixed(2);
}
function fnMax(arr){
arr.sort(function(a,b){return b-a});
console.log(arr[0]);
return arr[0];
}
function fnMin(arr){
arr.sort(function(a,b){return a-b});
return arr[0];
}
function fnSort(arr){
arr.sort(function(a,b){return b-a});
return arr;
}
fnInput(arr,num);
console.log('总成绩为:' + fnSum(arr));
console.log('平均成绩为:' + fnAvg(arr,num));
console.log('最高成绩为:' + fnMax(arr));
console.log('最低成绩为:' + fnMin(arr));
console.log('从高到低排序为:' + fnSort(arr));
</script>
- 歌咏比赛,有10个评委,有5个选手,求出每一个选手的平均得分(去掉一个最高分和一个最低分)。
<script>
// 十、歌咏比赛,有10个评委,有5个选手,求出每一个选手的平均得分(去掉一个最高分和一个最低分)。
function fnInput(){
// var m = parseInt(prompt('请输入有几位选手'));
for(var i = 0;i <= 2;i ++){
alert('第' + (i + 1) + '位选手');
arr = [];
var sum = 0;
for(var j = 0;j <= 3;j ++){
arr[j] = (Number(prompt('请输入第' + (j + 1) + '个评委的分')));
sum += arr[j];
}
//最高分
fnMax(arr);
//最低分
fnMin(arr);
//平均分
console.log('总分' + sum);
var avg = ((sum - i_max -i_min)/4).toFixed(2);
console.log('第' + (i + 1) + '位选手的得分为' + avg);
}
}
function fnMax(arr){
//排序,从大到小
var max = arr.sort(function(a,b){return b - a;})
console.log(max);
i_max = max[0];
console.log('最高分' + i_max);
return i_max;
}
function fnMin(arr){
var min = arr.sort(function(a,b){return a - b;})
// console.log(min);
i_min = min[0];
console.log('最低分' + i_min);
return i_min;
}
fnInput();
</script>