当前位置: 首页 > news >正文

常见遍历方法 for循环、forEach、map、filter、find、findIndex、some、every

for循环

来自于远古的遍历方式,并且涵盖多种手段,例如for in 和for of。

for(let i = 1; i<=5; i++){
	console.log("这是第"+i+"次"+"循环")
}

for循环 中使用break和continue语句(终止和跳过本次循环):

for(let i=1;i<=10;i++){
	if(i==3){
		break;//跳出循环,执行循环后面的语句(整个循环便终止了)
	}
	console.log(i)
}

for(let i=1;i<=10;i++){
	if(i==3 || i==7 || i==9){
		continue;//中断循环中的迭代,然后继续循环中的下一个迭代
	}
	console.log(i)
}

for of 用来遍历数组也是可以的
for of 中也可以用break和continue

遍历对象: for in

let student = {name:"张三",sex:"男",age:18,hometown:"河南许昌"}
for(let x in student){
	console.log(x+":"+student[x]+)
}//x为key键  属性     student[x]为值 value

for in 也可以遍历数组,但不推荐
for in 中也可以用break和continue

forEach遍历

forEach是ES5中操作数组的一种方法,主要功能是遍历数组。

let arr = [1,2,3,4];
let sum = 0;
arr.forEach(function(value,index,array){
	array[index] == value;    //结果为true
	sum+=value;  
});
console.log(sum);    //结果为 10

forEach可以修改自己吗?
答:在数组每一项为引用类型时可以

let arr = [1,2,3,4,5,6]
arr.forEach((item) => {
	item = item +1
})
console.log(arr)//[1,2,3,4,5,6]

let objArr = [{num:1},{num:2}]
objArr.forEach((item) => {
	item.num +=1
})
console.log(objArr)//[{num:2},{num:3}]

完整见:https://blog.csdn.net/web2022050901/article/details/125002327

forEach不可以用break和continue

那forEach怎么跳出和终止循环呢?
forEach跳出:

var arr = [1,2,3,4,5,6]
arr.forEach((item) => {
	if (item === 3) {
		return
	}
    console.log(item)
})

将输出 1 2 4 5 6,3不会输出

forEach终止:(抛出异常的方式)

var arr = [1,2,3,4,5,6]
try{
  arr.forEach((item) => {
  	  if (item === 3) {
  		  throw new Error('End Loop')
  	  }
      console.log(item)
  })
} catch (e) {
    if(e.message === 'End Loop') throw e
}

将只输出 1 2

map

map即是 “映射”的意思 用法与 forEach 相似。

[].map(function(value,index,array){
  //code
})

MDN上说:map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。具体使用如下:

let array = [1, 4, 9, 16];
const map1 = array.map(x => {
    return x + 1;
});
console.log(array)//[1,4,9,10.16]
console.log(map1)//[2,5,10,17]

可见map并不会修改原数组。

filter

filter用于对数组进行过滤,得到符合条件的新数组。
filter() 不会对空数组进行检测;不会改变原数组。

let nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
 
let res = nums.filter((num) => {
  return num > 5;
});
 
console.log(res);  // [6, 7, 8, 9, 10]

find

find()方法用于查找数组中符合条件的第一个元素,如果没有符合条件的元素,则返回undefined。

let arr = [1, 2, 3, 4, 5];
let num = arr.find(item => {
	return item > 1
});
console.log(num)  //2

findIndex

findIndex方法常用来查找数组中满足条件的第一项元素的下标。

const arr = [1, 2, 3, 4, 5, 3, 3, 2, 4, 5 ]
let index = arr.findIndex(item => {
    return item > 2
})
console.log(index) // 2

some

some() 方法用于检测数组中的元素是否满足指定条件(函数提供)。
some() 方法会依次执行数组的每个元素:

  • 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
  • 如果没有满足条件的元素,则返回false。

注意: some() 不会对空数组进行检测。
注意: some() 不会改变原始数组。

let data = ['1','2','3']
//一直在找符合条件的值,一旦找到,则不会继续迭代下去。
let re = data.some(function(item){
    // 只要判断做比较的变量是数组中有的就返回true
    return item === '1' // true
})
console.log(re)//true

与some()方法相反
every() 方法用于检测数组所有元素是否都符合指定条件(函数提供)。
every() 方法使用指定函数检测数组中的所有元素:

  • 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
  • 如果所有元素都满足条件,则返回 true。

注意: every() 不会对空数组进行检测。
注意: every() 不会改变原始数组。

let data=['1','2','3']
// every(function(){})是对数组中每一项运行给定函数,如果该函数对每    一项返回true,则返回true,
// 一旦有一个不符合条件,则不会继续迭代下去
let result = data.every(function(item){
    return item === '1'
})
console.log(result) // false

相关文章:

  • STM32国产替代方案
  • 学js的第十七天
  • 搭建自己的云存储空间|FastDFS分布式文件系统考虑一下?
  • <哈希及模拟实现>——《C++高阶》
  • 【力扣】两数之和 II - 输入有序数组
  • 懒人方案--半天搞定一个SpringBoot单体项目
  • 【JAVA数据结构】JAVA数据结构必备知识:泛型与包装类
  • 微服务项目:尚融宝(40)(核心业务流程:申请借款额度(3))
  • 将web前端项目部署到github,在hbuilderx中部署github中的项目、对Github加速
  • Pytorch优化器全总结(二)Adadelta、RMSprop、Adam、Adamax、AdamW、NAdam、SparseAdam
  • MFI不告诉你的秘密
  • 【RocketMq 系列】RocketMq 消息重试机制、死信队列
  • 该从什么角度思考npm、yarn与pnpm的区别
  • 分库分表一:ShardingSphere介绍和入门实战
  • Linux内存管理(三十一):页面回收总结
  • 《剑指offer》分解让复杂问题更简单
  • Android单元测试 - 几个重要问题
  • ES2017异步函数现已正式可用
  • ES6简单总结(搭配简单的讲解和小案例)
  • extract-text-webpack-plugin用法
  • jQuery(一)
  • MD5加密原理解析及OC版原理实现
  • Spring Cloud中负载均衡器概览
  • tweak 支持第三方库
  • uni-app项目数字滚动
  • webpack4 一点通
  • WePY 在小程序性能调优上做出的探究
  • XML已死 ?
  • 安卓应用性能调试和优化经验分享
  • 今年的LC3大会没了?
  • 浅谈Golang中select的用法
  • 算法系列——算法入门之递归分而治之思想的实现
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 我是如何设计 Upload 上传组件的
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • ###项目技术发展史
  • (C#)获取字符编码的类
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (四) Graphivz 颜色选择
  • (转载)利用webkit抓取动态网页和链接
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .net2005怎么读string形的xml,不是xml文件。
  • .net分布式压力测试工具(Beetle.DT)
  • .NET运行机制
  • /dev下添加设备节点的方法步骤(通过device_create)
  • /etc/motd and /etc/issue
  • @Builder用法
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • []T 还是 []*T, 这是一个问题