js中循环(遍历)数组的方法

本文详细介绍了12种循环数组的方法,包括for循环、forin循环、forof循环等,并对比了它们的功能与适用场景,深入解析每种循环的特点与优劣。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

循环数组的方法

循环列表:
1、for循环
2、for in循环
3、for of循环
4、for Each循环
5、while 循环
6、do while循环
7、map循环
8、filter循环
9、some循环
10、every循环
11、reduce循环
12、reduceRight循环
优化版的for循环
forEach变种
for循环是最普通的一个循环了,一般都是用for循环

let arr = ['1','2','3']
for (let i = 0; i < arr.length; i++) {
	console.log(i,arr[i] + 1)
}
//打印出来的i是他每一个的下标,arr[i]就是他的每一项。
// 0 "11"
// 1 "21"
// 2 "31"

for in循环可以循环对象,也可以循环数组。用for in 循环的时候,他会找到prototype上去,所以最好在循环体内写一个判断,用obj[i].hasOwnProperty(i),这样就避免遍历出太多不需要的属性。

let arr = ['1','2','3'];
let objDq = {a:1,b:2,c:3};
// 循环对象
for (let i in objDq) {
	console.log(i,objDq[i])
}
// i代表键,objDq[i]代表值
// a 1
// b 2
// c 3
// 循环数组
let arr = ['1','2','3'];
for (let i in arr) {
	console.log(i,arr[i])
}
// i代表下标,arr[i]代表每一项
// 0 '1'
// 1 '2'
// 2 '3'

fo of 循环功能特别强大(es6新增),可以代替for in循环和fo Each循环,而且还可以遍历类数组对象

// 类数组对象
let obj = { 10: 'a', 2: 'b', 7: 'c' }
for (let i of arr) {
	console.log(i)
}
// i就是它的每一项,如果打印arr[i],我打印出来第三个值是undefined。

for Each循环,他接受三个参数,但是只有第一个是必须有的。注意,用forEach循环在元素没有遍历完之前是不会停止的,没有break语句,可以用try catch语句,就是在要强制退出的时候,抛出一个 error 给 catch 捕捉到,然后在 catch 里面 return,这样就能中止循环了。

arr.forEach(function (i,n,m) {
	console.log(i,n,m)
})
// i代表数组的每一项,n代表每一项的下标,m是原数组
// 1 0 (3) ["1", "2", "3"]
// 2 1 (3) ["1", "2", "3"]
// 3 2 (3) ["1", "2", "3"]

while循环

let arr = ['1','2','3'];
var objCc = 0;
while (arr[objCc]) {
	console.log(arr[objCc]);
	// 一定加这个要不就是死循环,电脑直接卡死
	break
}

和for循环一样,只不过这个写的比较麻烦,for循环比这个简单。
do while 循环是 while 循环的一个变体,它首先执行一次操作,然后才进行条件判断,是 true 的话再继续执行操作,是 false 的话循环结束。

let iSa = 3;
do{
 console.log(iSa)
 iSa--;
}
while(iSa>0)
// 打印的就是3,2,1

map循环,map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。map 和 forEach 方法都是只能用来遍历数组,不能用来遍历普通对象。

let arr = [1,2,3];
	arr.map(function(i,n,m){
 		console.log(i,n,m)
 		return i*2;
	})
// i代表每一项,n代表下标,m代表以前的数组
// 1 0 (3) [1, 2, 3]
// 2 1 (3) [1, 2, 3]
// 3 2 (3) [1, 2, 3]

filter循环是 Array 对象内置方法,它会返回通过过滤的元素,不改变原来的数组。

let arr = [1,2,3];
let arrObf = arr.filter(function(i,n,m){
	console.log(i,n,m)
 return i>1;  //遍历数组中是所有元素返回大于1的元素
})
// i代表每一项,n代表下标,m代表以前的数组
// 1 0 (3) [1, 2, 3]
// 2 1 (3) [1, 2, 3]
// 3 2 (3) [1, 2, 3]
console.log(arrObf)
// 打印的是 [2, 3]

some方法用于检测数组中的元素(只要有一个满足条件就是true)是否满足指定条件(函数提供),返回 boolean 值,不改变原数组。

let arr = [1,2,3];
let arrObf = arr.some(function(i,n,m){
	console.log(i,n,m)
// i每一项,n下标,m原数组
// 1 0 (3) [1, 2, 3]
// 2 1 (3) [1, 2, 3]
 	return i>1;
})
console.log(arrObf)
// 打印出来就是true

every的方法用于检测数组所有元素(或每一个元素都必须满足条件才为true)是否都符合指定条件(通过函数提供),返回 boolean 值,不改变原数组。

let arr = [1,2,3];
let arrObf = arr.every(function(i,n,m){
	console.log(i,n,m);
	// 1 0 (3) [1, 2, 3],第一个值,下标为0不满足
 	return i>1;
})
console.log(arrObf)
// 打印出来的就是false

reduce循环方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。接收四个参数

let arr = [1,2,3];
let arrObf = arr.reduce(function(i,n,m,v){
	console.log('i'+ i,'n' + n,'m' + m,'v' + v,)
	// i1 n2 m1 v1,2,3
	// i3 n3 m2 v1,2,3
 	return i+n;
})
console.log(arrObf);
// 打印出来的就是6

reduceRight循环和 reduce() 功能是一样的,它是从数组的末尾处向前开始计算。也是接收四个参数。

let arr = [1,2,3];
let arrObf = arr. reduceRight(function(i,n,m,v){
	console.log('i'+ i,'n' + n,'m' + m,'v' + v);
	// i3 n2 m1 v1,2,3
	// i4 n1 m0 v1,2,3
 	return i+m;
})
console.log(arrObf)
// 打印出来的就是4

优化版的for循环,使用临时变量将长度缓存起来,避免重复获取数组长度当数组较大时优化效果才会比较明显,这种方法基本上是所有循环遍历方法中性能最高的一种.

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

forEach变种,因为forEach是Array自带的,对于一些非这种类型的,无法直接使用(如NodeList), 所有才有了这个变种,使用这个变种可以让类似的数组拥有forEach功能。

let arr = [1,2,3];
Array.prototype.forEach.call(arr,function(item,index,arr){ 
	console.log(item,index,arr);
	// item是每一项,index是下标,arr是原数组
	// 1 0 (3) [1, 2, 3]
 	// 2 1 (3) [1, 2, 3]
 	// 3 2 (3) [1, 2, 3]
 })

没写的接收几个参数的,默认就接收三个参数,有不对的地方欢迎评论指出,我好修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

放学别走啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值