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

发布时间:2023年12月31日

目录

一、普通循环

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));
    ?// 输出每个水果

文章来源:https://blog.csdn.net/m0_66570642/article/details/135318342
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。