JS数组遍历的十二种方式

遍历有如下几种方式
数组方法
- map
- forEach
- filter
- find
- findIndex
- every
- some
- reduce
- reduceRight
其他方法
- for
- for in
- for of
数组方法
map
核心
- 创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。
- 不改变原数组
- 返回值是一个新的数组
let testArr = ['子项0','子项1','子项2'];
let resultArr = testArr.map((item, index) => {
return `处理·${item}`
});
console.log(resultArr);
// 结果: ["处理·子项0", "处理·子项1", "处理·子项2"]
缺陷
可以使用return,但是不能使用break和continue
forEach
核心
- 对数组的每个元素执行一次提供的函数。
- 总是返回undefined。
- 不改变原数组
let testArr = ['子项0','子项1','子项2'];
testArr.forEach((item, index)=>{
return `forEach处理${item}`
});
缺陷
可以使用return,但是不能使用break和continue
filter
核心
- 对数组的每一项都进行过滤,返回符合条件的item组成的数组
- 不会改变原数组
let filterArr = ['子项0','子项1','子项2'];
let filterResult = filterArr.filter((item, index) => {
return item === '子项0';
});
console.log(filterArr); // ["子项0", "子项1", "子项2"]
console.log(filterResult); ["子项0"]
缺陷
可以使用return,但是不能使用break和continue
find
核心
- 遍历数组,找到第一个符合条件的项,并返回该项。否则返回undefined
- 不会改变数组
let findArr = ['子项0','子项1','子项2']
let findResult = findArr.find((item, index) => {
return item === '子项0';
});
console.log(findResult);
// 结果为: 子项0
缺陷
可以使用return,但是不能使用break和continue
findIndex
核心
- 遍历数组找到第一个符合条件的项,并返回该项的索引值。否则返回-1。
- 不会改变数组对象。
let findIndexArr = ['子项0','子项1','子项2'];
let findIndexResult = findIndexArr.findIndex((item, index)=>{
return item === '子项0';
});
console.log(findIndexResult);
// 结果为: true
缺陷
可以使用return,但是不能使用break和continue
every
核心
- 对数组中的每一项运行给定函数,如果该函数对每一项返回true,则返回true。简单说就是看数组的每个元素是否符合要求,都符合则返回true,否则返回false
let everyArr = [2,3,4];
let everyResult = everyArr.every((item, index)=>{
return item > 0
});
console.log(everyResult);
// 结果为: true
缺陷
可以使用return,但是不能使用break和continue
some
是对数组中每一项运行指定函数,如果该函数对任一项返回true,则返回true。
let someArr = [2,3,4];
let someResult = someArr.some((item, index)=>{
return item > 3
});
console.log(someResult);
// 结果为: true
缺陷
可以使用return,但是不能使用break和continue
reduce
- 接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值。
- 第二个参数作为第一次调用的a的值
// reducer
let reduceArr = [0,1,2,3,4]
let reduceResult = reduceArr.reduce((a, b)=>{
return a + b;
});
console.log(reduceResult);
// 结果: 10
缺陷
可以使用return,但是不能使用break和continue
reduceRight
- 和reduce一样是累加器,不过是从右往左计算
- 第二个参数作为第一次调用的a的值
let reduceRightArr = [0,1,2,3,4]
let reduceRightResult = reduceRightArr.reduceRight((a, b)=>{
return a + b;
});
console.log(reduceRightResult);
// 结果: 10
缺陷
可以使用return,但是不能使用break和continue
其他方法
for循环
核心
使用临时变量,并且遍历的是key.
let testArr = ['子项0','子项1','子项2'];
for(var i = 0; a < testArr.length; i++){
console.log(testArr[i]);
}
缺陷
- 可以正常使用使用break和continue, 但是不能正常使用return
let testArr = ['子项0','子项1','子项2'];
// break
for(var i = 0; i < testArr.length; i++) {
if(i === 1) {
break;
}
console.log(testArr[i]);
}
// 结果为: 子项0 // continue
for(var i = 0; i < testArr.length; i++) {
if(i === 1) {
continue;
}
console.log(testArr[i]);
}
// 结果为: 子项0 子项目2 //return
for(var i = 0; i < testArr.length; i++) {
if(i === 1) {
return;
}
console.log(testArr[i]);
}
// 结果为什么也没有
for in循环
核心
遍历的是key
let testArr = ['子项0','子项1','子项2'];
for(let i in testArr){
console.log(testArr[i])
}
缺陷
- 可以正常使用使用break和continue, 但是不能正常使用return
let testArr = ['子项0','子项1','子项2'];
// break
for(let i in testArr){
if(i === 1) {
break;
}
console.log(testArr[i]);
}
// 结果为: 子项0 // continue
for(let i in testArr){
if(i === 1) {
continue;
}
console.log(testArr[i]);
}
// 结果为: 子项0 子项目2 //return
for(let i in testArr){
if(i === 1) {
return;
}
console.log(testArr[i]);
}
// 结果为什么也没有
for of循环
核心
遍历的是value
let testArr = ['子项0','子项1','子项2'];
for(let i of testArr) {
console.log(i);
}
缺陷
- 可以正常使用使用break和continue, 但是不能正常使用return
let testArr = ['子项0','子项1','子项2'];
// break
for(let value of testArr){
if(value === '子项1'){
break;
}
console.log(value);
}
// 结果为: 子项0 // continue
for(let value of testArr){
if(value === '子项1'){
continue;
}
console.log(value);
}
// 结果为: 子项0 子项目2 //return
for(let value of testArr){
if(value === '子项1'){
return;
}
console.log(value);
}
// 结果为什么也没有
注意️
- 数组方法都不可以用break和continue,for循环之类的不可以用return但是可以正常使用break和continue
JS数组遍历的十二种方式的更多相关文章
- js 数组去重常见的几种方式
1.利用标记 var arr = [2,6,2,6,4,3,16];// arr = [2,6,4,3,16] function norepeat(arr){ var res = []; for(va ...
- 【js】js数组置空的三种方式
方式1: var arr = new Array(1,2,3); alert(arr); arr.splice(0, arr.length); alert(arr); 方式2: var arr = n ...
- 浅谈6种JS数组遍历方法的区别
本篇文章给大家介绍一下6种JS数组遍历方法:for.foreach.for in.for of.. each. ().each的区别.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. ...
- JavaScript学习12 JS中定义对象的几种方式
JavaScript学习12 JS中定义对象的几种方式 JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工 ...
- JavaScript学习12 JS中定义对象的几种方式【转】
avaScript学习12 JS中定义对象的几种方式 转自: http://www.cnblogs.com/mengdd/p/3697255.html JavaScript中没有类的概念,只有对象. ...
- 转→js数组遍历 千万不要使用for...in...
看到一篇内容还不错,但是排版实在糟糕, 逼死强迫症患者啊,直接拉下去找原文连接,找到了,但是已经消失了···500错误... 第一次因为实在看不下去一篇博客的排版, 为了排版而转载... 转载地址:h ...
- java遍历Map的几种方式
1.遍历map的几种方式:private Hashtable<String, String> emails = new Hashtable<String, String>(); ...
- JS弹出对话框的三种方式
JS弹出对话框的三种方式 我们用到了alert()方法.prompt()方法.prompt()方法,都是在网页有一个弹出框,那么就让我们探究一下他们之间的区别: 一.第一种:alert()方法 < ...
- java 遍历Map的四种方式
java 遍历Map的四种方式 CreationTime--2018年7月16日16点15分 Author:Marydon 一.迭代key&value 第一种方式:迭代entrySet 1 ...
随机推荐
- 探讨Netty获取并检查Websocket握手请求的两种方式
在使用Netty开发Websocket服务时,通常需要解析来自客户端请求的URL.Headers等等相关内容,并做相关检查或处理.本文将讨论两种实现方法. 方法一:基于HandshakeComplet ...
- System.nanoTime与System.currentTimeMillis比较
System.nanoTime与System.currentTimeMillis比较 currentTimeMillis返回的是系统当前时间和1970-01-01之前间隔时间的毫秒数,如果系统时间固 ...
- python1.2元组与字典:
#定义元组(),元组与列表类似但元素不可以更改a=(1,2,3,4,5,6,"a","b","c","d"," ...
- Python初学者的自我修养,找到自己的方向
今天是 Python专题 的第22篇文章,原本今天是准备和大家继续Python当中多线程的使用的相关内容.然而前两天有一个读者在后台问我,学习Python有哪些适合新手入门的小项目推荐,所以今天这篇临 ...
- 同一台服务器部署三个Tomcat
工具 apache-tomcat-8.0.30 安装tomcat步骤 1. 下载apache-tomcat-8.0.30 ,下载下来的文件为apache-tomcat-8.0.30 ...
- 通过java程序(JSch)运行远程linux主机上的shell脚本
如果您看完文章之后,觉得对您有帮助,请帮我点个赞,您的支持是我不竭的创作动力! 如果您看完文章之后,觉得对您有帮助,请帮我点个赞,您的支持是我不竭的创作动力! 如果您看完文章之后,觉得对您有帮助,请帮 ...
- 导航菜单(动画)--- jQuery
本文章实现是一个导航菜单的功能 (1)点击当前菜单显示二级菜单,再次点击收起当前菜单. (2)当有一个二级菜单显示,点击其他菜单,上一个已点击菜单会收起.只展示当前点击的菜单,只显示一个菜单,类似手风 ...
- C#算法设计排序篇之02-快速排序(附带动画演示程序)
快速排序(Quick Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/677 访问. 快速排序由C. A. R ...
- 在不影响程序使用的情况下添加shellcode
参考 在文章Backdooring PE Files with Shellcode中介绍了一种在正常程序中注入shellcode的方式,让程序以前的逻辑照常能够正常运行,下面复现一下并解决几个小问题. ...
- DFS【搜索1】
DFS模板 void dfs(int depth)//depth表示当前的层数(或深度) { if(depth>n)//到达叶子节点,该路已走到尽头 return; for(int i=;i&l ...