JS中的12种循环遍历的方法

1、for循环

JS常见的循环,常用于循环数组、字符串之类

let arr = [1, 2, 3];
for (let i = 0; i < arr.length; i++) {
    console.log(i, arr[i])
}
// 0 1
// 1 2
// 2 3

2、while循环

也是JS常见的循环

arr = ["1", "2", "3", "4"];
var i = 0;
while (arr[i]) {
    console.log(arr[i] + "<br>")
    i++;
};

3、do while循环

此循环是while循环的一个变体,它首先执行一次操作,然后再进行条件判断,是true的话就继续执行操作,否则的话,循环结束

let i = 3;
do {
    console.log(i)
    i--;
}
while (i > 0)
// 3
// 2
// 1

4、forEach循环:对数组的每个元素执行一次给定的函数

forEach 循环在所有元素调用完毕之前是不能停止的,它没有 break 语句,如果你必须要停止,可以尝试 try catch 语句,就是在要强制退出的时候,抛出一个 error 给 catch 捕捉到,然后在 catch 里面 return,这样就能中止循环了,如果你经常用这个方法,最好自定义一个这样的 forEach 函数在你的库里。

(1)语法:

arr.forEach(callback(currentValue [, index [, array]])[, thisArg])

(2)参数:

callback: 为数组中的每个元素执行的函数,该函数接收1~3个参数

	currentValue :  数组中正在处理的当前元素
	index(可选) :数组中正在处理的当前元素的索引
	array(可选):forEach()方法正在操作的数组,即当前正在调用的数组

thisArg(可选): 当执行回调函数callback时,用作this的值

(3)返回值 :undefined

(4)forEach会改变原数组吗?

查看这篇博客

5、for in循环:以任意的顺序遍历一个对象的除Symbol以外的可枚举的属性

(1)语法:

for(variable in object)

(2)参数:

variable:	在每次迭代的时候,variable会被赋值为不同的属性名

object:非Symbol类型的可枚举属性被迭代的对象

(3)注意:

for…in…不应该用于迭代于一个关注于索引顺序的Array,它是为遍历对象而构建的

6、for of 循环:for…of语句在可迭代的对象(包括Array,Map,set,String,TypedArray,arguments对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个属性的值执行语句

0

(1)语法:

for (variable of iterable) {}

(2)参数:

variable: 在每次迭代中,将不同属性的值分配给变量

iterable:被迭代枚举其属性的对象

(3)示例:

// 迭代Array
let iterable = [10,20,30]

for(let value of iterable) {
    value += 1
    console.log(value);//11   21    31
}

console.log(iterable); //[10,20,30]
//并不改变原数组



//迭代String
let iterable = 'boo'

for(let value of iterable) {
    console.log(value); // b o o
}

console.log(iterable); //boo

(4)for…of 与 for…in的区别

它们之间的主要区别在于它们的迭代方式

for…in语句以任意顺序迭代对象的可枚举属性

for…of语句遍历可迭代对象定义要迭代的数据

7、map():方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值

(1)注意:

map()不会对空数组进行检测

map()不会改变原始数组

(2)语法:array.map(function(currentValue,index,arr), thisValue)

function(currentValue,index,arr):
	函数,数组中的每个元素都会执行这个函数
	函数参数:  currentValue:当前元素的值
						index:当前元素的索引值
						arr:当前元素属于的数组对象
thisValue:对象作为该回调时使用,传递给函数,用作"this"的值,如果省略了thisValue,或者传入null、undefined,那么回调函数的this为全局对象

(3)返回值

返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值

8、filter():创建一个新数组,其中包含通过所提供函数实现测试的所有元素

(1)语法:var newArray = arr.filter(callback(element[,index[,array]])[,thisArg])

callback:
	用来测试数组中的每个元素的函数;返回true表示该元素通过测试,保留该元素,false则不保留。他接受三个参数:
		element:数组中当前正在处理的元素。
		index:正在处理元素在数组中的索引
		array:调用了filter的数组本身
thisArg:
	执行callback时,用于this的值

(2)返回值:

一个新的、由通过测试的元素组成的数组,如果没有任何元素通过测试,则返回空数组

9、some():测试数组中是不是至少有一个元素通过了被提供的函数测试。它返回的是一个Boolean类型的值

(1)注意:

如果用一个空数组进行测试,在任何情况下它返回的都是false

(2)语法:arr.some(callback(element[, index[, array]])[, thisArg])

callback:用来测试每个元素的函数,接受三个参数:
	element:数组中正在处理的元素
	index:数组中正在处理的元素的索引值
	array:some()被调用的数组
	
thisArg:执行callback时使用的this值

(3)返回值:

数组中至少有一个元素通过回调函数的测试就会返回true,所有元素都没有通过回调函数的测试返回值才会为false

10、every():测试一个数组内的所有元素是否都能通过某个指定函数的测试。它返回一个布尔值

(1)注意:

若收到一个空数组,此方法在一切情况下都会返回true

(2)语法:arr.every(callback(element[, index[, array]])[, thisArg])

callback:用来测试每个元素的函数,它可以接收三个参数:
	element:用于测试当前值
	index:用于测试当前值的索引
	array:调用every的当前数组
thisArg:执行callback时使用的this值

(3)返回值

如果回调函数的每一次返回都为truthy值,返回true,否则返回false

11、reduce():对数组中的每个元素执行一个由你提供的reducer函数(升序执行),将其结果汇总为单个返回值

(1)语法:arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])

callback:执行数组中的每个值(如果没有提供initaValue)的函数,包含四个参数:
	accmulator:累计器累计回调的返回值;它是上一次调用回调时返回的累积值
	currentValue:数组中处理的元素
	index:数组中正在处理的当前元素的索引。如果提供了initialValue,则起始索引号为0,否则从索引1起始
	array:调用reduce()的数组

(2)返回值:

函数累计处理的结果

12、reduceRight():方法接受一个函数作为累加器和数组的每个值(从右到左)将其减少为单个值

(1)语法:arr.reduceRight(callback(accumulator, currentValue[, index[, array]])[, initialValue])

callback:一个回调函数,用于操作数组中的每个元素,它可接受四个参数:
	accumulator:累加器,上一次调用回调函数时,回调函数返回的值。首次调用回调函数时,如果initiaValue存在,累加器即为initiaValue,否则须为数组中的最后一个元素
	currentValue:当前元素,当前被处理的元素
	index:数组中当前被处理的元素的索引
	array:调用reduceRight()的数组
initialValue:首次调用 callback 函数时,累加器 accumulator 的值。如果未提供该初始值,则将使用数组中的最后一个元素,并跳过该元素。如果不给出初始值,则需保证数组不为空

(2)返回值:执行之后的返回值

  • 4
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值