1. 数组的基本认识
数组:一组有序的数据,可以一次性存储多个数据,可以在数组中存放任意的数据,并且数组的长度可以动态调整
-
创建数组:
* 1.字面量的方式: var 变量名=[]; 空数组
* 2.通过构造函数创建数组
* var 数组名=new Array();
* 数组的名字如果直接输出,那么直接就可以把数组中的数据显示出来,如果是一个空数组,就什么都不显示
*
* var 数组名=new Array(数字); 括号中只有一个数字时,这个数字表示数组的长度
* 如果一个数组如果没有数据,但是有长度,这个数组中的数就是undefined类型的
*
* var arr = new Array(1,2,3,4,5); 括号中有多个值,表示这个数组中有数据了,这个数组的长度就是这些数据的个数 -
数组中每个元素都有自己的一个标号(索引),数组的索引是从0开始的: arr[0]里面存储的是1,arr[1]==2, 以此类推
-
如何设置数组中某个位置的值? arr[0]=10; 这个arr数组中的第一个元素值就变成了10
- 注意:无论使用哪种方式创建数组,如果有长度,则默认就是undefined类型的
- 数组的索引与数组长度之间的关系:数组的索引是从 0 到 (长度-1); 长度减1就是最大的索引值
需要注意的点:
- 数组中存储的数据类型可以是不同的
var arr2 = [10, 'hahahaaha', null, undefined, true, new Object()];
- 数组的长度是可以改变的
- 过索引来设置数组中元素的值
- 通过索引来获取数组中的值
- 创建数组:
var arr4 = new Array();
var arr5 = new Array(5); // 数组长度为5
var arr6 = new Array(1, 2, 3, 4, 5); // 数组元素为1,2,3,4,5
- for循环遍历数组
var arr = [10, 20, 30, 40, 50];
for (var i = 0; i <= arr.length - 1; i++) {
console.log(arr[i]); // 注意:i是数组的索引值,从0开始,一直到(数组的长度-1)结束,遍历整个数组
}
2. 数组的案例
案例1: 提示用户输入班级人数,求总成绩,平均值,最高分,最低分
//提示用户输入人数,并转成数字类型
var perCount = parseInt(prompt('请输入班级人数'));
//定义数组存储班级中每一个人的成绩
var perScores = [];
//以循环的方式录入每一个人的成绩
for (var i = 0; i < perCount; i++) {
//把每个人的成绩存储到数组中
perScores[perScores.length] = parseInt(prompt('请输入第' + (i + 1) + '个同学的成绩'));
}
//成绩都已经存储在了数组perScores中,求总成绩
var sum = 0;
var max = perScores[0];//求最大值
var min = perScores[0];//求最小值
for (var j = 0; j < perScores.length - 1; j++) {
sum += perScores[j];
//求最大值
if (max < perScores[j]) {
max = perScores[j];
}
//求最小值
if (min > perScores[j]) {
min = perScores[j];
}
}
//求平均值
var avg = sum / perScores.length;
console.log('和为' + sum);
console.log('平均值是:' + avg);
console.log('最大值是:' + max);
console.log('最小值是:' + min);
案例2: 反转数组: 把数组中的数据位置调换
// 一个长度是length的数组,如果要实现数组反转,主要是遵循以下交换规律:
//第0个元素与第length-1-0个元素互换
//第1个元素与第length-1-1个元素互换
//第2个元素与第length-1-2个元素互换
//第3个元素与第length-1-3个元素互换
//第4个元素与第length-1-4个元素互换
// 依次类推, 交换的次数是: length/2 次
var arr=[1,2,3,4,5];
//设置一个循环: 该循环的目的是控制循环的次数
for (var i = 0; i < arr.length / 2; i++){
//先把数组中第一个元素的值放在第三方变量中
var temp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = temp;
}
console.log(arr);
案例2:去掉数组中重复的0
//把新数组的长度作为下标使用,数组的长度是可以改变的
var arr = [10,0,20,0,30,0,40,0,50];
var newArr = []; //创建一个新的空数组,用来存放第一个数组中所有非0的数字
for (var j = 0; j < arr.length; j++){
if (arr[j] != 0){
newArr[newArr.length] = arr[j]; //注意:新创建的数组长度是可以改变的,每循环一次,它的长度就 +1
}
}
console.log(newArr);
案例3:把数组中每个元素用竖线 | 拼接到一起产生一个字符串并输出
var names = ['卡卡西', '佐助', '鸣人', '大蛇丸', '雏田', '小苏', '凤姐', '黑崎一护'];
var str = '';
for (var i = 0; i < names.length - 1; i++) {
str += names[i] + '|';
}
console.log(str + names[names.length - 1]);
案例4:冒泡排序
重点中的重点!!! 一定要会!!!
//实现从小到大的排列顺序
var arr = [23, 12, 10, 30, 40, 2, 1]; //这个需要排序的数组的长度是7
//循环控制比较次数: 如果数组的长度是n ,则需要经过n-1轮的比较
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;
}
}
}
console.log(arr);
3. break与continue
break关键字: 立即跳出当前所在的循环。
continue关键字: 跳出当前循环,继续进行下一次循环
练习1:找到100-200之间,第一个能够被7整除的数字
for (var a = 100; a <= 200; a++) {
if (a % 7 == 0) {
document.write(a);
break;
}
}
练习2: 求100-200之间所有奇数的和,使用continue
var odd = 0;
for (var b = 100; b <= 200; b++){
//判断是不是偶数,如果是偶数,就跳过这个数字
if (b % 2 == 0){
continue;
}
odd += b;
}
document.write(odd);
练习3:求整数1-100的累加值,但要求碰到个位为3的数则停止累加;
var sum = 0;
for (var i = 1; i <= 100; i++) {
if (i % 10 == 3) {
break;
}
sum += i;
}
document.write(sum);
练习4:求100-200的累加值,但要求跳过所有个位数为3的数
var he = 0;
var j = 1;
while(j <= 200){
if (j%3 == 0){
//满足if的条件,说明这个数的个位数是3,这个值不要,跳过
j++; //注意,这里的自增不能掉
continue;
}
he += j;
j++;
}
document.write(he);