循环语句和数组

Posted pavilion-y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了循环语句和数组相关的知识,希望对你有一定的参考价值。

1. 循环语句

javascript中,循环语句有三种,while、do..while、for循环。

1.1. while循环

基本语法:

//当循环条件为true时,执行循环体,
//当循环条件为false时,结束循环。
while(循环条件){
  //循环体
}

代码示例:

//计算1-100之间所有数的和
//初始化变量
var i = 1;
var sum = 0;
while(i <= 100){//判断条件
  sum += i;//循环体
  i++;//自增
}
console.log(sum);

1.2. 断点调试

断点调试是指自己在程序的某一行设置一个断点,调试时,程序运行到这一行就会停住,然后你可以一步一步往下调试,调试过程中可以看各个变量当前的值,出错的话,调试到出错的代码行即显示错误,停下。

调试步骤:

浏览器中按F12-->sources-->找到需要调试的文件-->在程序的某一行设置断点

调试中的相关操作:

Watch:监视,通过watch可以监视变量的值的变化,非常的常用。
F10:程序单步执行,让程序一行一行的执行,这个时候,观察watch中变量的值的变化。
F8:跳到下一个断点处,如果后面没有断点了,则程序执行结束。

tips: 监视变量,不要监视表达式,因为监视了表达式,那么这个表达式也会执行。

1.3. do..while循环

do..while循环和while循环非常像,二者经常可以相互替代,但是do..while的特点是不管条件成不成立,都会执行一次。

基础语法:

do{
  //循环体;
}while(循环条件);

代码示例:

//初始化变量
var i = 1;
var sum = 0;
do{
  sum += i;//循环体
  i++;//自增
}while(i <= 100);//循环条件

思考:

1. 循环输入账号密码的案例用do..while怎么写?
2. 循环表白的案例用do..while怎么写?
  //        var i = 1;
        //        var sum = 0;
        //        while(i <= 100){
        //            sum += i;//sum =sum + i;
        //            i++;
        //        }
        //        console.log(sum)
        //        var i = 1;
        //        var sum = 0;
        //        do {
        //            sum = sum + i;
        //            i++;
        //        } while (i <= 100);
        //        console.log(sum);
        //        var usename = prompt("请输入用户名");
        //        var password = prompt("请输入密码");
        //        while(usename != "admin" || password != "123456"){
        //            usename = prompt("请输入用户名");
        //            password = prompt("请输入密码");
        //        }
        //        do {
        //            var usename = prompt("请输入用户名");
        //            var password = prompt("请输入密码");
        //        } while (usename != "admin" || password != "123456");
 
        //        var love = prompt("请说你爱我y/n");
        //        while(love != "y"){
        //            love = prompt("请说你爱我y/n");
        //        }
 
        //        do{
        //            var love = prompt("请说你爱我y/n");
        //        }while(love != "y");
        //        alert("我也很爱我自己")

1.4. for循环(重点)

写while循环的经常会忘记自增,for循环其实是while循环演化过来的,语法更加的简洁明了,使用非常的广泛。

for循环语法:

//主要for循环的表达式之间用的是;号分隔的,千万不要写成,
for(初始化表达式;判断表达式;自增表达式){
  //循环体
}

执行顺序:1243 ---- 243 -----243(直到循环条件变成false)

  1. 初始化表达式
  2. 判断表达式
  3. 自增表达式
  4. 循环体

for循环代码示例:

//计算1-100之间所有数的和
var sum = 0;
for(var i = 1; i <= 100; i++){
  sum += i;
}

思考1:

1 求1-100之间所有数的和、平均值
var sum = 0;
//
//        for(var i = 1; i <= 100; i++){
//            sum += i;
//        }
//        console.log(sum);
//        var average = sum/100;
//        console.log(average);
2 求1-100之间所有数的乘积
var product = 1;
//        for(var i = 2;i <= 100;i++){
//            product = product * i;
//        }
//        console.log(product);
3 计算1-100之间能3整除的数的和
var sum = 0;
//        for(i = 1;i <= 100;i++){
//            if(i % 3 == 0){
//                sum = sum +i;
//            }
//        }
//        console.log(sum); // 1680
4 计算1-100之间不能被7整除的数的和
var sum = 0;
        for(i = 1;i <= 100;i++){
            if(i % 7 != 0){
                sum = sum +i;
            }
        }
        console.log(sum);  //4315

思考2:

5 求1-100之间所有偶数的和
6 求1-100之间所有奇数的和
7 同时求1-100之间所有偶数和奇数的和
var oddsum = 0; //奇数和
    var evensum = 0; //偶数和
    for(i = 1; i <= 100; i++){
        if(i % 2 == 0){
            evensum += i;
        }
        if(i % 2 != 0){
            oddsum += i;
        }
    }
    console.log(evensum);
    console.log(oddsum);

思考3:

1 打印正方形
2  打印直角三角形
3 打印9*9乘法表
for(var i = 1;i <= 9; i++){
        for(var j = 1;j <= i;j++){
            document.write(j + "+" + i + "=" + i*j + "&nbsp;&nbsp;&nbsp;")
        }
        document.write("<br/>")
    }

思考4:

1. 本金10000元存入银行,年利率是千分之三,每过1年,将本金和利息相加作为新的本金。计算5年后,获得的本金是多少?
var money = 10000;
    var rate = 0.003;
    for (var i = 1; i <= 5; i++) {
        money = money + money * rate;
    }
    console.log(money);

2. 有个人想知道,一年之内一对兔子能繁殖多少对?于是就筑了一道围墙把一对兔子关在里面。已知一对兔子每个月可以生一对小兔子,而一对兔子从出生后第3个月起每月生一对小兔子。假如一年内没有发生死亡现象,
那么,一对兔子一年内(12个月)能繁殖成多少对? 
   兔子的规律为数列,1,1,2,3,5,8,13,21
   //    var n1 = 1;
    //    var n2 = 1;
    //    var sum = 0;
    //    for(var i = 3;i <= 12;i++ ){
    //        sum = n1 + n2;
    //        n1 = n2;
    //        n2 = sum;
    //    }
    //    console.log(sum);

1.5. break和continue

break:立即跳出整个循环,即循环结束,开始执行循环后面的内容(直接跳到大括号)

 

       跳出小循环
        // for(var i = 0; i < 20; i ++){
        //     console.log("i循环中的内容" + i);
        //     var flag = false;
        //     for(var j = 0; j < 20; j ++){
        //         if(j == 10){
        //             flag = true;
        //             break;
        //         }
        //         console.log("j循环中的内容" + j);
        //     }
        //     if(flag){
        //         break;
        //     }
        // }
跳出大循环
        // iloop:
        // for(var i = 0; i < 20; i ++){
        //     console.log("i循环中的内容" + i);
        //     for(var j = 0; j < 20; j ++){
        //         if(j == 10){
        //             break iloop;
        //         }
        //         console.log("j循环中的内容" + j);
        //     }
        // }

 

continue:立即跳出当前循环,继续下一次循环(跳到i++的地方)

思考1:

//输出结果是什么?
for(var i = 1; i <=10; i++) {
  if(i == 5){
    continue;
  }

  if(i == 7){
    break;
  }
  console.log(i);
}   (1,2,3,4,6)

思考2:

1. 求1-100之间不能被7整除的整数的和(用continue)
2. 求200-300之间所有的奇数的和(用continue)
var sum = 0;
                for (var i = 200; i <= 300; i++) {
                    if (i % 2 == 0) {
                        continue;
                    }
                    sum = sum + i;
                }
                console.log(sum);

3. 求200-300之间第一个能被7整数的数(break)

1.6. 总结

  1. 循环有很多种,但是以后用得最多的是for循环
  2. 当不明确循环次数的时候,可以使用while循环
  3. 当无论如何都要执行一次代码的时候,可以使用do..while循环。
  4. 循环可以相互替代。

2. 数组

所谓数组,就是将多个元素(通常是同一类型)按一定顺序排列放到一个集合中,那么这个集合我们就称之为数组。

思考:

为什么要有数组?
1. 我们知道,一个变量能够存储一个值,当我们想要存储多个值的时候,就可以使用数组。比如存储一个班级里面所有学生的姓名。
2. 使用数组可以对多个相同类型的值统一的管理,存储起来方便,操作的时候也会很方便。

2.1. 创建数组

在javascript数组是一个有序的列表,可以在数组中存放任意的数据,并且数组的长度可以动态的调整。

通过构造函数创建数组

var arr = new Array();//创建了一个空数组
var arr = new Array("zs","ls","ww");//创建了一个数组,里面存放了3个字符串
var arr = new Array(1,2,3,4);//创建了一个数组,里面存放了4个数字
var arr = new Array(5);//长度为5的数组

通过数组字面量创建数组

var arr1 = []; //创建一个空数组
var arr2 = [1, 3, 4]; //创建一个包含3个数值的数组,多个数组项以逗号隔开
var arr3 = ["a", "c"]; // 创建一个包含2个字符串的数组

2.2. 数组的下标与长度

数组的下标:数组是有序的,数组中的每一个元素都对应了一个下标,下标是从0开始的

var arr = ["zs", "ls", "ww"];
arr[0];//下标0对应的值是zs
arr[3];//下标3对应的值是ww

数组的长度:跟字符串一样,数组有一个length属性,指数组中存放的元素的个数。

var arr = ["zs", "ls", "ww"];
arr.length;//这个数组的长度是3
//空数组的长度是0

下标与长度的关系:最大的下标 = length - 1

2.3. 数组的赋值与取值

数组的取值

//格式:数组名[下标]
//功能:获取数组对应下标的那个值,如果下标不存在,则返回undefined。
var arr = ["red", "green", "blue"];
arr[0];//red
arr[2];//blue
arr[3];//这个数组的最大下标为2,因此返回undefined

数组的赋值

//格式:数组名[下标] = 值;
//如果下标有对应的值,会把原来的值覆盖,如果下标不存在,会给数组新增一个元素。
var arr = ["red", "green", "blue"];
arr[0] = "yellow";//把red替换成了yellow
arr[3] = "pink";//给数组新增加了一个pink的值

思考:如何给一个数组增加新的元素?

1. 把1-100之间所有的数,放到数组中
var arr = new Array();
  for(var i = 1;i <= 100;i++ ){
//     arr[i-1] = i;
    arr.push(i);
  }
  console.log(arr);
2. 把1-100之间所有的奇数,放到数组中
var arr = [];
  for(i = 1;i <= 100;i++){
    if(i % 2 !=0){
//      arr[arr.length] = i;
      arr.push(i);
    }
  }
  console.log(arr);
3. 把1-100之间能被3整数的数字,存到数组中
var arr = [];
  for(i = 1;i <= 100;i++){
    if(i % 3 == 0){
//      arr[arr.length] = i;
      arr.push(i);
    }
  }
  console.log(arr);

2.4. 数组的遍历

遍历:遍及所有,对数组的每一个元素都访问一次就叫遍历。

数组遍历的基本语法:

for(var i =0; i < arr.length; i++) {
    //数组遍历的固定结构
}

思考1:

var arr = [298, 1, 3, 4, 6, 2, 23, 88,77,44];
1 求一组数中的所有数的和跟平均值
var sum = 0;
  for(i = 0 ;i < arr.length;i++){
    sum = sum + arr[i];
  }
  console.log(sum);
  console.log(sum / arr.length);
2 求一组数中的最大值
var max = arr[0];
  for(i = 0 ;i < arr.length;i++){
    if(arr[i] > max){
      max = arr[i];
    }
  }
  console.log(max);
3 求一组数中的最小值和最小值所在的位置
  var min = arr[0];
  var index = 0;
  for(i = 0 ;i < arr.length;i++){
    if(arr[i] < min){
      min = arr[i];
      index = i;
    }
  }
  console.log(min);
  console.log(index);

4 求一组数中的最大值和最小值以及所在位置
  var arr = ["a", "bb", "ccc", "dddd"];
//    var arr1 = [];
//    for (var i = arr.length - 1; i >= 0; i--) {
//        arr1.push(arr[i]);
//    }
//    console.log(arr1);

思考2:

var arr = ["a", "bb","ccc","dddd"];
1 将字符串数组用|或其他符号分割
var arr = ["a", "bb", "ccc", "dddd"];
    var str = "";
    for(i = 0;i < arr.length; i++){
        if(i == arr.length - 1){
            str = str + arr[i]
        }else{
            str = str + arr[i] + "|";
        }
 
    }
    console.log(str);

2 有一个字符串数组,求字符串数组中每项的长度,并把长度的数值存储到新的数组中
var arr = ["a", "bb", "ccc", "dddd"];
    var len = 0;
    var arr1 = [];
    for(i = 0; i < arr.length; i++){
        arr1.push(arr[i].length);
    }
    console.log(arr1);

3 将数组中值为0的项去掉,将不为0的值存入一个新的数组
var arr = [1, 0, 0, 2, 6, 8, 0, 10, 0, 22];
    var arr1 = [];
    for(var i = 0; i < arr.length; i++){
        if(arr[i] != 0){
            arr1.push(arr[i]);
        }
    }
    console.log(arr1);

4 让一个数组倒叙保存另一个数组中的每一项( 倒着遍历)

3. 冒泡排序

  1. var arr = [65, 97, 76, 13, 27, 49, 58]
        var ci = 0;
        var tang = 0;
        for (var i = 0; i < arr.length - 1; i++) {
            tang++;
            for (var j = 0; j < arr.length - 1 - i; j++) {
                ci++;
                if (arr[j] > arr[j + 1]) {
                    var temp = arr[j + 1];
                    arr[j + 1] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        console.log(arr);
        console.log(ci);
        console.log(tang);
    2.完成版本
    var arr = [65, 97, 76, 13, 27, 49, 58];
      var ci = 0;
      var tang = 0;
        for (var i = 0; i < arr.length - 1; i++) {
            var flag= true;
            tang++;
            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;
                    flag= false;
                }
                ci++;
            }
            if (ygs == true) {
                break;
            }
        }
    console.log(arr);
    console.log(tang);
    console.log(ci);
 
 
 
 

【数组去重】 

  var arr = [1, 2, 3, 5, 6, 7, 2, 3, 54, 645, 64, 23, 42, 342, 4, 24, 23, 42, 42, 42];
    var newArr = [];
    var ci = 0;
    var tang = 0;
    for (var i = 0; i < arr.length; i++) {
        //需要判断arr[i] 在newArr中是否存在
        var flag = true;//假设不存在
        tang++;
        for (var j = 0; j < newArr.length; j++) {
            if (arr[i] == newArr[j]) {
                flag = false;
            }
            ci++;
        }
        if (flag) {
            newArr.push(arr[i]);
        }
    }
    console.log(ci);
    console.log(tang);
    console.log(newArr);

【计算一个数是几位数】

 var num = +prompt("请输入一个数字");
  //1   1/10=0.1  = 0
  //21  21/10=2/10 = 0
  //321 321/10 = 32/10 = 3/10 = 0
 
  //count用来记录位数
  var count = 0;
  while(num != 0){
    num = parseInt(num/10);
    count++;
  }
  console.log(count);

 

【将12345转换成54321】

 

 var num = +prompt("请输入一个数字");
  //12345
  var str = "";
 
  while(num != 0){
 
    var yu = num%10;
    str = str + yu;
    num = parseInt(num/10);
  }
  console.log(+str);

以上是关于循环语句和数组的主要内容,如果未能解决你的问题,请参考以下文章

循环语句和数组

条件语句循环数组

如何在 if 语句和 for 循环之外获取数组

流程控制和数组

JS中for...in 语句用于对数组或者对象的属性进行循环操作吗?

Java 增强 for 循环