遍历有如下几种方式

数组方法

  • 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数组遍历的十二种方式的更多相关文章

  1. js 数组去重常见的几种方式

    1.利用标记 var arr = [2,6,2,6,4,3,16];// arr = [2,6,4,3,16] function norepeat(arr){ var res = []; for(va ...

  2. 【js】js数组置空的三种方式

    方式1: var arr = new Array(1,2,3); alert(arr); arr.splice(0, arr.length); alert(arr); 方式2: var arr = n ...

  3. 浅谈6种JS数组遍历方法的区别

    本篇文章给大家介绍一下6种JS数组遍历方法:for.foreach.for in.for of.. each. ().each的区别.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. ...

  4. JavaScript学习12 JS中定义对象的几种方式

    JavaScript学习12 JS中定义对象的几种方式 JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工 ...

  5. JavaScript学习12 JS中定义对象的几种方式【转】

    avaScript学习12 JS中定义对象的几种方式 转自:  http://www.cnblogs.com/mengdd/p/3697255.html JavaScript中没有类的概念,只有对象. ...

  6. 转→js数组遍历 千万不要使用for...in...

    看到一篇内容还不错,但是排版实在糟糕, 逼死强迫症患者啊,直接拉下去找原文连接,找到了,但是已经消失了···500错误... 第一次因为实在看不下去一篇博客的排版, 为了排版而转载... 转载地址:h ...

  7. java遍历Map的几种方式

    1.遍历map的几种方式:private Hashtable<String, String> emails = new Hashtable<String, String>(); ...

  8. JS弹出对话框的三种方式

    JS弹出对话框的三种方式 我们用到了alert()方法.prompt()方法.prompt()方法,都是在网页有一个弹出框,那么就让我们探究一下他们之间的区别: 一.第一种:alert()方法 < ...

  9. java 遍历Map的四种方式

      java 遍历Map的四种方式 CreationTime--2018年7月16日16点15分 Author:Marydon 一.迭代key&value 第一种方式:迭代entrySet 1 ...

随机推荐

  1. MySQL InnoDB技术内幕:内存管理、事务和锁

    前面有多篇文章介绍过MySQL InnoDB的相关知识,今天我们要更深入一些,看看它们的内部原理和机制是如何实现的. 一.内存管理 我们知道,MySQl是一个存储系统,数据最后都写在磁盘上.我们以前也 ...

  2. ORCHESTRATOR介绍及使用

    ORCHESTRATOR 一简介 MySQL高可用性和复制拓扑管理工具,支持复制拓扑结构的调整,自动故障转移和手动主从切换等.后端数据库用MySQL或SQLite存储元数据,并提供Web界面展示MyS ...

  3. 【python设计模式-创建型】工厂方法模式

    工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻 ...

  4. tracebace用法

    介绍一下traceback 平时看到的程序的错误信息也就是traceback信息 举个简单例子: import traceback try: s = [1, 2, 3] print s[5] exce ...

  5. 可能是Asp.net Core On host、 docker、kubernetes(K8s) 配置读取的最佳实践

    写在前面 为了不违反广告法,我竭尽全力,不过"最佳实践"确是标题党无疑,如果硬要说的话 只能是个人最佳实践. 问题引出 ​ 可能很多新手都会遇到同样的问题:我要我的Asp.net ...

  6. 如果连这10个Python缩写都不知道,那你一定是Python新手

    简介 对于许多开始学习编程的人来说,Python已经成为他们的首选.Python有非常直观的语法和支持动态类型的灵活性.此外,它是一种解释语言,这使得使用交互式控制台进行学习成为可能.基本上,我们只需 ...

  7. MyBatis深入理解参数

    目录 一.快速创建mapper文件 二.parameterType 三.MyBatis 传递参数 1. 一个简单参数(掌握) 一.快速创建mapper文件 由于每个接口都要创建一个对应的mapper文 ...

  8. 网易云音乐ncm格式分析以及ncm与mp3格式转换

    目录 NCM格式分析 音频知识简介 两种可能 GitHub项目 格式分析 总体结构 密钥问题 代码分析 main函数 导入模块 dump函数 参考资料 代码完整版 转换工具 ncmdump ncmdu ...

  9. 【LifecycleException】: org.apache.catalina.LifecycleException: A child container failed during start 解决

    看了好多种解决方案: 第一种:从tomcat remove project -> clean project -> reboot project; 第二种:说用到的 jasper jsp解 ...

  10. java 多态二

    一 多态-转型 多态的转型分为向上转型与向下转型两种: 向上转型:当有子类对象赋值给一个父类引用时,便是向上转型,多态本身就是向上转型的过程. 使用格式: 父类类型  变量名 = new 子类类型() ...