JavaScript 中的循环迭代方法(七种)

目录

一、普通循环

for 循环:

while 循环:

do...while 循环:

二、特殊循环

for...in 循环:

for...of 循环:

forEach()循环:

map方法

语法

属性


一、普通循环

1.for 循环:

for 循环是最常见和经典的循环结构之一。它允许你明确指定循环的起始条件、终止条件和每次迭代后进行的操作。

 for (let i = 0; i < length; i++) {
   // 循环体内的操作
 }

2.while 循环:

while 循环在每次迭代之前检查指定的条件,并在条件为真时执行循环体内的操作。

 let i = 0;
 while (i < length) {
   // 循环体内的操作
   i++;
 }

3.do...while 循环:

do...while 循环与 while 循环类似,但它在循环体的操作之后检查指定的条件。

 let i = 0;
 do {
   // 循环体内的操作
   i++;
 } while (i < length);

二、特殊循环

4.for...in 循环:

for...in 循环用于迭代对象的可枚举属性。它将遍历对象的属性,并对每个属性执行指定的操作。但需要注意遍历的顺序是不确定的,

写法:

 for (let key in object) {
   // 循环体内的操作
 }

案例:

 1.遍历对象的属性:
     const obj = {
       name: 'John',
       age: 30,
       occupation: 'Developer'
     };
 ​
     for (let key in obj) {
       console.log(key + ':', obj[key]);
     }
     /**  
         输出: 
             name: 'John',
             age: 30,
             occupation: 'Developer'
     */
 // 该代码将遍历对象 obj 的可枚举属性,并打印每个属性的键和对应的值。
 ​
 ​
 2.统计对象属性个数:
     const obj = {
       name: 'John',
       age: 30,
       occupation: 'Developer'
     };
 ​
     let count = 0;
     for (let key in obj) {
       count++;
     }
     console.log('Property count:', count);
     /**  
         输出: Property count:3
     */
 //该代码通过 for...in 循环遍历对象 obj 的属性,每遍历到一个属性就将计数器 
 //count 加一。最后,打印对象属性的个数。

注意:

for...in 循环遍历的是对象的可枚举属性,包括原型链上的属性。如果不想遍历原型链上的属性,可以使用 hasOwnProperty() 方法进行过滤:

 for (let key in obj) {
   if (obj.hasOwnProperty(key)) {
     // 循环体内的操作
   }
 }
 ​
 //这样可以确保只遍历对象自身的属性,而不包括继承的属性。

5.for...of 循环:

for...of 循环是 ES6 中引入的新特性,用于迭代可迭代对象(如数组、字符串等)的元素。它可以更方便地遍历集合对象中的元素。

写法:

for (let element of iterable) {
   // 循环体内的操作
 }

案例:

 1.遍历数组元素:
     const arr = [1, 2, 3, 4, 5];
 ​
     for (let element of arr) {
       console.log(element);
     }
 //    该代码将遍历数组 arr 的元素,并将每个元素打印到控制台。
 ​
 2.遍历字符串的字符:
     const str = "Hello";
 ​
     for (let char of str) {
       console.log(char);
     }
 //    该代码将遍历字符串 str 的字符,并将每个字符打印到控制台。
 ​
 3.遍历可迭代对象的自定义类型:
     const iterableObj = {
         *[Symbol.iterator]() {
             yield "a";
             yield "b";
             yield "c";
         }
     };
 ​
     for (let element of iterableObj) {
         console.log(element);
     }
 // 该代码定义了一个可迭代对象 iterableObj,它使用生成器函数(Generator)
 // 定义了自己的迭代器。然后,通过 for...of 循环遍历该可迭代对象的元素,并打印每个元素。
 ​

注意: for...of 循环只能用于遍历可迭代对象,而不能用于遍历普通对象(非可迭代对象)。如果想要遍历普通对象的属性,请使用 for...in 循环。

6.forEach()循环:

forEach() 方法需要一个函数作参数

 let perArr = ["孙悟空","红孩儿","猪八戒","二郎神","唐三藏","沙悟净"];
 function fun (){
     console.log("我有多少个"); // 执行6遍,因为有perArr 有6个元素
 }
 perArr.forEach(fun);

但一般直接写函数

 let perArr.forEach(function(){
     console.log("我有多少个"); // 执行6遍,因为有perArr 有6个元素
 });

而这种函数是由开发人员创建,但却不是由开发人员调用的,称为回调函数

并且数组中有几个元素,改函数就执行多少遍,如果有添加上形参

1、遍历的元素

let perArr = ["孙悟空","红孩儿","猪八戒","二郎神","唐三藏","沙悟净"];
 perArr.forEach(function(a){
     console.log(a); // 孙悟空 红孩儿 猪八戒 二郎神 唐三藏 沙悟净
 });

2、遍历元素的索引(下标)

let perArr = ["孙悟空","红孩儿","猪八戒","二郎神","唐三藏","沙悟净"];
 perArr.forEach(function(a,b){
     console.log(b); // 0 1 2 3 4 5 
 });

3、正在遍历的数组对象

 let perArr = ["孙悟空","红孩儿","猪八戒","二郎神","唐三藏","沙悟净"];
 perArr.forEach((a,b,c)=>{
     console.log(c);  // (孙悟空 红孩儿 猪八戒 二郎神 唐三藏 沙悟净)*6
 });

总结

 let perArr = ["孙悟空","红孩儿","猪八戒","二郎神","唐三藏","沙悟净"];
 perArr.forEach((value,index,object)=>{
     console.log(value); 
     console.log(index); 
     console.log(object); 
 });

注意forEach() 方法它并不支持在循环中使用 breakreturn 来提前终止循环,

7.map方法

语法
array.map(function(currentValue, index, arr), thisValue)
 ​
 /**
 *   currentValue:当前处理的元素;
 *   index:当前处理元素的索引;
 *   arr:当前处理元素的数组。
 */
属性
  • 不修改原数组map 方法创建一个新数组,而不修改原始数组。这对于保持数据的不可变性很有用,因为你不必担心在处理数据时不小心更改原数组。

  • 函数式编程map 是函数式编程中的常见工具之一,它允许你以声明性的方式处理数据,从而使代码更易读和维护。

  • 数据转换:在很多情况下,你可以使用 map 来将一种数据格式转换为另一种,例如,将对象数组中的特定属性提取出来,以创建一个包含这些属性值的新数组。

  • 转换数组元素map 允许你将数组中的每个元素通过一个回调函数进行处理,从而创建一个新的数组,其中的元素是原数组经过处理后的结果。这可以用于将数组中的数据进行转换,修改或映射到一个新数组。

 javascriptconst numbers = [1, 2, 3, 4, 5];
 const squaredNumbers = numbers.map((num) => num * num);
 // squaredNumbers 现在包含 [1, 4, 9, 16, 25]
  • 遍历数组:通过 map,你可以遍历数组中的元素,执行一些操作,而不需要显式的 for 循环或 forEach 方法。

     javascriptconst fruits = ['apple', 'banana', 'cherry'];
     fruits.map((fruit) => console.log(fruit));
     // 输出每个水果

你可能感兴趣的:(前端,javascript,开发语言)