Javascript学习之路:js中关于遍历总结

news2024/11/17 1:40:55

在这里插入图片描述

循环/遍历

  • 循环,就是一遍又一遍的重复执行相同或者相似的代码
  • 循环结构的两个要素
    • 循环体–要执行的相同或相似的语句
    • 循环条件–重复执行的次数,或者继续执行循环的条件

👉while循环

  • while循环语法格式

    
     while(boolean表达式){
         循环体语句
     }
     
     // 若boolean表达式为true,则执行一遍循环体中的语句,然后再判定一次boolean表达式,若为true,则再次执行一遍循环体中的语句,直到boolean表达式的值为false,则循环结束。
     
     while(isHungury){
         eatSomething()
     }
     
     // 需要注意的是,一般情况下,循环操作中会存在使得循环终止的可能性,否则将成为死循环
    
  • 案例1

    
    // 打印1~10
    var i=1; //初始值
    while(i<=10){//循环条件
        //循环体
        console.log(i);
       i++; //增量
    }
    console.log('当循环结束的时候,i的值是'+i)//拼接
    
    
  • 案例2

    
    // 循环打印70 65 60 55 50
    var i=70
    while (i>=50)
    {
        console.log(i);
        i-=5;
    }
    
    
  • 案例3

    //打印1-100之间所有的奇数
    var i=1;
    while(i<=100){
        //奇数
       if(i%2===1){
      	  console.log(i);
        }
        i++;}
        
        
    //计算1-100之间所有整数的和
    var i=1;
    var sum=0;//用于记录和
    while (i<=100)
    {
    //把每次产生的值加到sum
    sum+=i
    //console.log(sum);
      i++
    }
     //打印sum最终的结果
    console.log(sum);
    
    
    //计算1-100之间所有偶数的和
    var i=1;
    var sum=0;
    while(i<=100){
        if(i%2===0){
      	  //加到一起
      	  sum+=i;
        }
        i++;
    }
    console.log(sum);
        
    

👉do-while循环

  • do-while循环语法格式

    do{
        可执行的语句;  // 无论循环条件是否满足,循环体至少执行一遍
    }while(boolean表达式)
    
    // 先执行一次循环体中的语句,然后判定boolean表达式的值,若为true,则继续执行循环体中的语句;然后再继续判定boolean表达式的值...直到boolean表达式的值为false退出
    
    do{
        eatSomething()
    }while(isHungry)
    
  • 案例1

    
    // 打印30-50之间的所有整数
    var i=30;
    do
    {
        console.log(i);
        i++
    }while (i<51);
    
  • 案例2

    // 打印1-100的所有奇数
    var i=1;
    do
    { //判断是否为奇数
        if(i%2===1){
        console.log(i);
        }
        i++
    }while (i<=100);
     
    
  • 案例3

    //计算1~100之间所有能被7整除的数字的和
    var i=1;
    var sum=0;
    do
     {
          if(i%7===0){
            sum+=i;
          }
         i++;
     }while (i<=100);
     console.log(sum);
     
     //计算1~20之间所有能被3整除的数字的乘积
     var i =1;
     var s=1;
     do
     {
         if(i%3===0){
            s*=i;
         }
            i++;
     }while (i<=20);
     console.log(s);
    

while和do-while语句的区别

  1. while循环,先判断再执行
  2. do-while循环,先执行再判断,例如ATM机输密码
  3. 当初始情况不满足循环条件时,while循环一次都不会执行;do-while循环不管任何情况都至少执行一次。

//ATM机输密码,先输密码再判断对错。
//使用while循环
var upwd=123456;
while(true){
    varstr=prompt('请输入密码')if(str===upwd){
        break;
    }
}
//使用do-while循环
var upwd=123456;
do
{
    varstr=prompt('请输入密码');//输入密码
}
while ( str!=upwd);

👉for语句

  • for循环的语法格式

    
    //  初始值  循环条件  增量 
    for(表达式1;表达式2;表达式3){
        循环体语句
    } 
    
    
  • for循环执行过程

    • 计算表达式1的值

    • 计算表达式2(boolean表达式)的值,如果为true则执行循环体,否则退出循环

    • 执行循环体

    • 执行表达式3

    • 计算表达式2;如果为true则执行循环体,否则退出循环

    • 如此循环往复,直到表达式2的值为false

    • 案例

    
    //1-50之间所有能被3整除
    for (var i=1;i<=50;i++ )
    {
        if(i%3===0){
            console.log(i);
        }
    }
    
    //计算101-200之间所有的偶数和
    for (var i=101,sum=0;i<=200;i++)
    {
        if(i%2==0){
            sum+=i;
        }
    }
    console.log(sum);
    
    //打印本世纪所有闰年
    for (var i=2000;i<2100;i++ )
    {
        if(i%4===0 && i%100 !==0||i%400===0){
            console.log(i);
        }
    }
    
    //九九乘法表的第五行
    //1*5= 5  ,2*5=10  ,3*5=15 ,4*5=20  ,5*5=25
    for(var i=1,str='';i<=5;i++){
                                     //str+=i; //1 2 34 5在一行
        str+=i+'*5='+i*5+'   ';      //字符串的拼接
    }
    console.log(str);
    
    
  • for语句三个表达式特殊用法

    • 表达式1位置内容为空

      var sum=0;
      var i=1;
      for(;i<=100;i++){
      	sum+=i;
      }
      console.log('1-100的和为:',sum) //1-100的和为: 5050
      
    • 表达式3的位置内容为空时

      var sum=0;
      for(var i=1;i<=100;){
      	sum+=i;
      	i++;
      }
      console.log('1-100的和为:',sum) //1-100的和为: 5050
      
    • 表达式1,2,3位置内容均为空时

      for(;;){
      	console.log('我要读书...') //死循环
      }
      
  • 循环中使用break语句

    • break用于循环,可使程序终止循环而执行循环后面的语句,常常与条件语句一起使用
    
       var sum=0
       for(var i=0;i<=100;i++){
      	 if(sum>=4000){
      		 break
      	 }
      	 sum+=i
       }
       // 当总和大于等于4000时,退出循环
    
    
  • 循环中使用continue 语句

    • continue关键字只用于循环中
    • 其作用为跳过本次循环体中剩余语句而执行下一次循环
    
      //打印1-10之间所有整数,不包含5
      for(var i=1;i<=10;i++){
          //当i为5,跳过后续语句
         if(i===5){
              continue;
          }
          console.log(i);
      }
      
      //计算1-100之间所有偶数的和,遇到奇数跳过
      for (var i=1,sum=0;i<=100;i++){
      //如果i为奇数,跳过
      if(i%2===1){
      	continue;
      	}
      	sum+=i;
      }
      console.log(sum);
      
    
  • 循环嵌套(一)

    • 需要多次重复执行一个或多个任务的问题考虑使用循环来解决

    • for/while/do-while三种循环在很多情况下是可以互换的;一般情况下,for循环使用最多

    • 案例1

        //*****
        for (var i=1,str='';i<=5;i++)
        {
        str+='*';
        }
        console.log(str);
      
      
        //*****
        //*****
        //*****
        //*****
        //*****
        for (var j=1;j<=5;j++ )
        {
            for(var i=1,str='';i<=5;i++)
        {
        str+='*';
        }
        console.log(str);
        }
        //外层:循环行
        //内层:循环列
      
    • 案例2

      //*    1 1
      //**   2  2
      //***  3 3
      //**** 4 4
      //***** 5 5
      for (var j=1;j<=5;j++ )
      {
          for(var i=1,str='';i<=j;i++)  //str写在内层,表示每循环一层把之前一层清空   
                                          str 写在外层,表示每循环一层把之前一层加上
      {
      str+='*';
      }
      console.log(str);
      }
      //外层:循环行
      //内层:循环列
      
    • 案例3

      //打印九九乘法表 (外层是九行
      /*
      1*1=1
      1*2=2   2*2=4
      1*3=3   2*3=6  3*3=9
      */
      //外层循环
      for(var i=1;i<=9;i++){
          //内层循环
        for(var j=1 str='';j<=i;j++){
              str+=j+'*'+i+'='+(j*i)+'';
        }
          console.log(str);
      }
      
    • 案例4

      //打印本世纪前10个闰年
      for (vari=2000,count=0;i<=2100;i++)
      {
          if(i%4===0 && i%100!==0 ||i%400===0 ){
              console.log(i);
              //如果i为闰年
              count++;
              //每次有一个闰年产生,判断是否为10
              if(count===10){
                  break;
              }
          }
      }
      console.log(count);
      
  • 循环嵌套(二)

    • 案例1

      for(var i=0,j=8;i<=5;i++,j--){
        console.log(i,j)
      }
      
    • 案例2

      // 多个条件表达式后边的起作用
      for(i=1,j=8;j>=1,i<=5;i++,j--){
        console.log(i,j)
      }
      
      for(var i=1,j=8;i<=5,j>=1;i++,j--){
        console.log(i,j)
      }
      
    • 案例3

      //计算1/20+2/18+.....10/2
      for(vari=1,j=20,sum=0;i<=10;i++,j-=2){
          sum+=i/j;
      }
      console.log(sum);
      

👉for in

  • 用于遍历对象
  • 只有对象才会关注原型上的方法,而遍历数组更多的是关注遍历数组里面的值,而不是关注原型。
  • for in会把原型上的东西都给遍历出来,只是数组都加了隐藏的属性,所以看不出来。

👉for of (es6)

  • 遍历具有可迭代协议([Symbol.iterator] 属性)的对象(Array Map Set string 类数组)
  • 迭代器的语法糖,循环出的item是next返回对象里的value值

// 迭代完成后循环结束
for(const item of iterable){
	 // iterable:可迭代对象
	 // item 每次迭代得到的数据
}

👉forEach()

  • forEach(fun)专门用于对原数组中每个元素执行相同的fun函数对象规定的操作

  • forEach(function(elem,i,arr){})

    • elem 数组中的每一个值
    • i 每一个下标
    • arr 数组本身

【面试题】:forEach能否取代for循环

  • 不能,forEach不支持continue和break
  • forEach的优势就是,它传入一个回调函数,因此形成一个作用域,它内部所定义的变量不会像for循环一样污染全局变量。
  • forEach本身无法跳出循环,必须遍历所有的数据才会结束

👉every()

  • every(fun) 判断数组中每一个元素是否都满足fun函数定义的条件,只有满足才返回true,否则返回false

  • every(function(elem,i,arr){ return xxx})

    • every中自带for循环,自动遍历数组中每个元素
    • 每遍历一个元素,就会自动调用回调函数
    • 如果回调函数返回true,则有必要继续判断下一个
    • 如果回调函数返回false,则没必要继续判断下一个,而是退出函数,直接返回false,表示不是所有元素都符合要求
    • 如果程序可以正常执行完循环,说明数组中所有元素都符合要求,才能返回true
    • 如果回调函数没有返回值,则every会悄悄得添加一个返回值为false
    • every得遍历见到false就停止
    • 回调函数得返回值如何设置
      • 返回值应该为筛选条件–>看数组中得值是否满足条件
        • 不满足条件,直接返回false,遍历停止
        • 满足条件,遍历继续,都满足,返回true。

👉some(func)

  • some(function(elem,i,arr){ return xxx})判断数组中是否包含满足fun函数定义得条件得元素。只要包含返回true,否则返回false
  • 如果回调函数没有返回值.则some会悄悄得添加一个返回值为false
  • some 的遍历见到false就继续,见到true才停止。
  • 返回值应该为筛选条件->看数组中的值是否都满足条件
  • 满足条件,直接返回true,遍历停止
  • 值不满足条件,继续遍历,如都不满足,返回false

👉filter(func)

  • filter(function(elem,i,arr){ return xxx}) 专门用于筛选出数组中符合fun函数判断条件得新数组

👉map(func)

  • map(function(elem,i,arr){ return xxx}) 专门用于基于原数组创建新数组对象

  • 对数组中的每一个值做操作 并把操作后的值汇成一个新数组

    var newArr=arr.map((val)=>{
        return val+2
    });
    console.log(newArr);
    
  • map()和forEach()的区别: 前者不改变原数组的内容,后者改变原数组的内容

👉reduce(func)

  • reduce((prev,elem,i,arr)=>{ return prev+elem})reduce()和reduceRight()方法会迭代数组中的每一个元素,汇总出和一个最终结果值返回

👉 find(func) 查找数组中符合指定条件的第一个元素,并返回该元素

const result = array.find((element, index, array) => {
  // 返回一个条件,用于查找符合条件的元素
	
	// element:当前遍历到的数组元素
	// index:遍历到所有数组元素的索引
	// array:调用 find 的数组本身
})

// 例
const numbers = [1, 2, 3, 4, 5];
const result = numbers.find((element) => {
  return element >= 3;
});
console.log(result); // 输出: 3

👉【扩展1】 for和forEach跳出循环的方法

  • for循环跳出循环

    • break 跳出循环
    • continue 跳出当次循环
    • return 终止当前函数的执行
    var arr = [1,3,5,7,9];
    var id = 5;
    for (var i = 0; i < arr.length; i++) {
        if(arr[i]=== 1) continue;    //跳过当次循环
        console.log(arr[i])
        if (arr[i] === id) {    
            break;                   //满足条件,跳出循环
        }
        if (arr[i] === 6) {
            return;              //满足条件,可以终止当前函数
        }
    }
    
  • forEach跳出循环

    • 通过抛出异常的方式跳出循环,return 跳出当次循环

      var arr = [1,3,5,7,9];
      var id = 5;
      try {
          arr.forEach(function (curItem, i) {
              if(curItem === 1) return;
              console.log(curItem)
              if (curItem === id) {
                  throw Error();         //满足条件,跳出循环
                        
              }
          })
      } catch (e) {
      }
      
      arr.forEach(function (curItem, i) {
       if(curItem === 1) return;
       console.log(curItem)
       if (curItem === id) {
           return;         //满足条件,跳出当次循环
           // break 语法报错;
                
       }
       })
      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1812505.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3D高斯泼溅原理及实践【3DGS】

人工智能可能是我们这个时代的主要领域之一&#xff0c;它几乎可以用于从驾驶汽车到医疗保健甚至能够预防失明等所有领域&#xff0c;最近提出了一种新的 3D 重建方法。SNGULAR 及其人工智能团队希望了解有关 3D 重建技术的最新更新的更多信息。 目前可用于 3D 重建的许多 SOT…

[干货!必看文章]学会如何用L4级AI软件开发平台免费制作应用程序

前言&#xff1a; 自从ChatGPT问世以来&#xff0c;就掀起了全球AI大模型的浪潮。国外有Claude&#xff0c;Llama&#xff0c;Grok&#xff0c;Suno&#xff0c;国内有kimi&#xff0c;有智谱AI&#xff0c;有通义千问&#xff0c;还有文心一言... 国内大模型市场规模已经达到了…

【Python/Pytorch - 网络模型】-- 手把手搭建U-Net模型

文章目录 文章目录 00 写在前面01 基于Pytorch版本的UNet代码02 论文下载 00 写在前面 通过U-Net代码学习&#xff0c;可以学习基于Pytorch的网络结构模块化编程&#xff0c;对于后续学习其他更复杂网络模型&#xff0c;有很大的帮助作用。 在01中&#xff0c;可以根据U-Net…

瓦片边界可视化工具

本文涉及的核心内容 瓦片边界可视化-VisibleTileBoundariesmeethigher/visible-tile-boundaries: visible tiles boundaries demo 一、瓦片边界可视化 1.1 背景 日常GIS开发中&#xff0c;需要了解瓦片是什么&#xff0c;瓦片展示的效果是什么样的。这种口头上抽象的东西&a…

计算机哈佛架构、冯·诺依曼架构对比

哈佛架构和冯诺依曼架构是两种不同的计算机系统架构&#xff0c;它们在存储器组织方式上有着显著的区别。下面是它们的原理、优缺点的对比以及一些常见的 MCU 采用的架构&#xff1a; 哈佛架构&#xff1a; 原理&#xff1a;哈佛架构将指令存储器&#xff08;程序存储器&#x…

Androd adb命令汇总,app专项测试命令。

1.普通命令 1.1 devices命令 # 语法格式 &#xff1a;adb devices [-l] # 作用 &#xff1a;返回已连接设备的信息 # 示例 &#xff1a;adb devices : 返回设备的信息adb devices -l : 返回设备的详细信息1.2 help命令 # 语法格式 &#xff1a;adb --help # 作用 &…

攻防世界--杂项misc-2017_Dating_in_Singapore

题目信息 题目描述和附件分别是一串数字和新加坡日历&#xff0c;数字中间有短线-连接&#xff0c;刚好分成了12个字段。猜想对应了12个月 01081522291516170310172431-050607132027262728-0102030209162330-02091623020310090910172423-02010814222930-0605041118252627-020…

集合进阶(接口Collection(迭代器、增强for、Lambda表达式)、List中常见的方法和五种遍历方式、数据结构(栈、队列、数组、链表)

一、单列集合顶层Collection List系列集合&#xff1a;添加的元素是有序、可重复、有索引Set系列集合&#xff1a;添加的元素是无序、不重复、无索引 Collection是单列集合的祖宗接口&#xff0c;它的功能是全部单列集合都可以继承使用的。 Collection的遍历方式 1、迭代器——…

catia零件装配中通过指南针移动零件

1 将零件导入进来后 2 把指南针移动到零件上 具体移动哪个可以通过模型树点击选中&#xff0c;选中那个就可以移动那个。 这种情况需要注意的是 需要双击选择要移动零件的父节点 如下图&#xff0c;Product2蓝色表示是激活的&#xff0c;这样才可以单击选中下面的零件后通过…

STM32F103RCT6换STM32F103C8T6后delay函数延时了10倍

更换单片机步骤&#xff1a; 1、型号选择 2、启动文件&#xff0c;将HD改为MD。 3、引入对应的启动文件。 4、后面发现delay比之前延时了差不多10倍&#xff0c;解决办法&#xff1a;在初始化后加入SystemInit();即可。

Frontiers旗下期刊,23年分区表整理出炉!它还值得投吗?

本周投稿推荐 SSCI • 中科院2区&#xff0c;6.0-7.0&#xff08;录用友好&#xff09; EI • 各领域沾边均可&#xff08;2天录用&#xff09; CNKI • 7天录用-检索&#xff08;急录友好&#xff09; SCI&EI • 4区生物医学类&#xff0c;0.5-1.0&#xff08;录用…

第十五届蓝桥杯pb组国赛E题[马与象] (15分)BFS算法 详解

博客主页&#xff1a;誓则盟约 系列专栏&#xff1a;IT竞赛 专栏 关注博主&#xff0c;后期持续更新系列文章 如果有错误感谢请大家批评指出&#xff0c;及时修改 感谢大家点赞&#x1f44d;收藏⭐评论✍ 问题描述&#xff1a; 小蓝有一个大小为 N N 的棋盘&#xff08;棋…

110.网络游戏逆向分析与漏洞攻防-装备系统数据分析-装备与技能描述信息的处理

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&#xff0c;代码看不懂是正常的&#xff0c;只要会抄就行&#xff0c;抄着抄着就能懂了 内容…

javaWeb项目-ssm+vue医院住院信息管理系统功能介绍

项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 1、Java简介 现代社…

Nvidia/算能 +FPGA+AI大算力边缘计算盒子:AI智能监控 用于沙滩救援

以色列的一个团队在人工智能领域取得的成果引起了轰动。 今天他们取得的成果源于多年前的一个想法。Netanel Eliav 和 Adam Bismut 是校园时代的旧伙伴&#xff0c;当时他们想要解决一个可以改变世界的问题&#xff0c;由此引出这样一个想法&#xff1a;溺水的 Bismut 漂流到死…

RV32M指令集

RV32M指令集 1、乘法运算2、除法运算1、乘法运算 MUL 指令(得到整数32位乘积(64位中的低32位)) MUL 指令用于执行两个带符号或无符号整数之间的乘法运算。其语法如下: mul rd, rs1, rs2 它将寄存器 rs1 和 rs2 中的值相乘,并将结果写入寄存器 rd 中。如果 rs1 和 rs2 都是有…

catia零件装配时预览零件的形状

这样的显示方式看不到 选择大或中图标就可预览零件形状

基于STM32的智能水产养殖系统(二)

TPS5433IDR TPS5433IDR 是一款由德州仪器 (Texas Instruments) 生产的高效降压转换器&#xff08;Buck Converter&#xff09;。它能够将较高的输入电压转换为较低的输出电压&#xff0c;适用于各种电源管理应用。 主要特性 输入电压范围: 5.5V 至 36V输出电压范围: 0.9V 至 …

惊艳的短视频:成都科成博通文化传媒公司

惊艳的短视频&#xff1a;瞬间之美&#xff0c;震撼心灵 在数字化时代&#xff0c;短视频以其短小精悍、内容丰富的特点&#xff0c;迅速占领了我们的屏幕和时间。而在这个浩如烟海的视频海洋中&#xff0c;总有一些短视频能够脱颖而出&#xff0c;以其惊艳的视觉效果、深刻的…

设计模式-代理模式(结构型)

代理模式 代理模式是一种结构型模式&#xff0c;它可以通过一个类代理另一个类的功能。代理类持有被代理类的引用地址&#xff0c;负责将请求转发给代理类&#xff0c;并且可以在转发前后做一些处理 图解 角色 抽象主题&#xff08;Subject&#xff09;: 定义代理对象和被代理…