ES5中数组遍历方式:
for循环
forEach():没有返回值,只是针对每个元素调用func
map():返回新的Array,每个元素为调用func的结果
filter():返回符合func条件的元素数组
some():返回boolean,判断是否有元素、是否符合func条件
every():返回boolean,判断每个元素是否符合func条件
reduce():接收一个函数作为累加器
for in ???
 
先定义数组arr提供下面代码使用:
let arr = [1, 2, 3];

 

for循环:

for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}

  

forEach():

forEach有三个参数:当前元素,当前索引值,数组本身

arr.forEach((item, index, array) => {
console.log(item, index, array);
});

  

for和forEach之间的区别是什么
for是可以跳出循环,而forEach是不能够跳出循环
也就是forEach不能使用break和continue两个关键字。
 
map:
从下面方法可以看出,map返回的是新数组,不会影响原来数组,没有副作用
let result = arr.map((value) => {
value++;
return value;
});
console.log(arr, result);

  

filter:
从下面方法可以看出,filter返回的是新数组,不会影响原来数组,没有副作用
let farr = [1, 2, 3];
let fresult = farr.filter((value) => {
return value === 2;
});
console.log(farr, fresult);

  

some:
some只要找到一个符合条件的元素,就会返回true
let sresult = arr.some((value) => {
return value === 2;
})
console.log(arr, sresult);

  

every:
every只要有一个不符合条件的元素,就会返回false
let eresult = arr.every((value) => {
return value === 2;
})
console.log(arr, eresult);

  

reduce:
reduce第一个参数是方法,第二个参数是累加的初始值
第一个参数方法能有四个参数:
prev:上一次调用回调函数的值,第一次就是初始值
cur:当前处理元素的值
index:当前处理元素的索引值
array:原数组
 
下面使用reduce计算arr数组里面所有元素的累加值:
let sum = arr.reduce((prev, cur, index, array) => {
// 上一次处理的结果加上当前元素值
return prev + cur
}, 0)
console.log(sum, arr);

  

利用reduce找出数组里面最大的值:
let max = arr.reduce((prev, cur) => {
return Math.max(prev, cur)
}, arr[0])
console.log(max);

  

利用reduce实现数组去重:
let arr2 = [1, 2, 2, 3, 4, 1]
let dresult = arr2.reduce((prev, cur) => {
// 当cur不在prev的时候,prev增加一项cur
prev.indexOf(cur) == -1 && prev.push(cur)
return prev
}, [])
console.log(dresult);

  

for in:
Array.prototype.foo = function () {
console.log('foo');
}
for (let index in arr) {
console.log(index, arr[index])
}
上面代码先在Array数组对象增加一个原型方法foo。
下面调用for in 的时候会把这个新增的原型方法打印出来。
for in 在操作数组的时候不够纯粹,不建议使用for in来操作数组。
 

ES6中数组遍历方式:
find():返回第一个通过测试的元素
findIndex():返回的值为该通过第一个元素的索引
for of
values()
keys()
entries()
 
find():
let f1 = arr.find((value) => {
return value < 2
})
console.log(f1, arr);

  

findIndex():
let f2 = arr.findIndex((value) => {
return value < 2
})
console.log(f2, arr);

  

for of:
for (let item of arr) {
console.log(item);
}

  

values:
for (let item of arr.values()) {
console.log(item);
}

  这里跟for of效果一样

keys:
for (let item of arr.keys()) {
console.log(item);
}

  

entries:
既要获取到索引又要获取到内容
for (let [index, item] of arr.entries()) {
console.log(index, item);
}

  

ES6-11学习笔记--数组遍历的更多相关文章

  1. C++11 学习笔记 std::function和bind绑定器

    C++11 学习笔记 std::function和bind绑定器 一.std::function C++中的可调用对象虽然具有比较统一操作形式(除了类成员指针之外,都是后面加括号进行调用),但定义方法 ...

  2. PHP学习之中数组-遍历一维数组【2】

    在PHP学习之中数组[1]中学会怎么创建一个数组,如果PHP学习之中数组[1]中的元素多的话,我们访问元素又是一个问题了,下面我们就使用for语句while,foreach来遍历我们的数组: < ...

  3. JavaScript学习笔记-数组

    数组 数组中的每个元素的位置是索引,索引是基于32位的由0开始的数值,最大索引为(2的32次方-2),最大长度为(2的32次方-3) 数组是无类型的:元素可为任意类型:动态的:可根据需要自动增长.缩减 ...

  4. JavaScript学习笔记-数组(1)

    数组是值的有序集合.每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示,称为索引.JavaScript数组是无类型的:数组元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的类型.数 ...

  5. Java菜鸟学习笔记--数组篇(三):二维数组

    定义 //1.二维数组的定义 //2.二维数组的内存空间 //3.不规则数组 package me.array; public class Array2Demo{ public static void ...

  6. JavaSE中Collection集合框架学习笔记(3)——遍历对象的Iterator和收集对象后的排序

    前言:暑期应该开始了,因为小区对面的小学这两天早上都没有像以往那样一到七八点钟就人声喧闹.车水马龙. 前两篇文章介绍了Collection框架的主要接口和常用类,例如List.Set.Queue,和A ...

  7. java学习笔记 --- 数组

    一.Java的内存分配   A:栈内存: 存储局部变量,只要是在方法中定义的变量都是局部变量.一旦变量的生命周期结束该变量就被释放.   B:堆内存: 存储所有new出来的,及实体(对象),每一个实体 ...

  8. ES6-11学习笔记--数组的扩展

    类数组 / 伪数组 Array.from() Array.of() copyWithin() fill() includes()   类数组.伪数组例子: let divs = document.ge ...

  9. JavaScript(ES6)学习笔记-Set和Map与数组和对象的比较(二)

    一.Map,Set,Array对比: 1.增 let map = new Map(); let set = new Set(); let array = []; map.set('t',1); //M ...

随机推荐

  1. GeoServer-REST应用:基于Qt网络编程一键同步发布空间数据和样式至GeoServer

    @ 目录 简介 配置 步骤   1.引入Qt网络模块   2.创建网络管理.网络响应.网络请求   3.创建工作空间   4.创建数据存储并上传数据   5.上传样式文件   6.图层发布   6.图 ...

  2. ROS路由器DHCP地址不够使用解决办法!

    由于这段时间公司使用ROS6.2+AC控制器+AP的方案做了公WIFI覆盖,但最近发现地址被用完. 如果使用默认的地址192.168.1.1-192.168.8.254,最多只有254个地址可用,但内 ...

  3. Net中委托之三委托的高级应用

    1. 使用委托来解决逻辑分离,解除耦合 2.委托的高级应用实例 using System; using System.Collections.Generic; using System.Linq; u ...

  4. JVM基本概念

    JVM基础概念 什么是JVM JVM:Java virtual machine,Java虚拟机,它是一种规范.是虚构出来的一台计算机.它可以将二进制字节码根据不同的操作系统转为当前操作系统识别的的字节 ...

  5. python3生成一个含有20个随机数的列表,要求所有元素不相同,并且每个元素的值介于1到100之间

    import random alist = random.sample(range(1,101),20) #random.sample()生成不相同的随机数 print(alist)

  6. ansible 五 playbooks剧本使用

    一.Playbook 简介 Playbooks与Ad-Hoc相比,是一种完全不同的运用Ansible的方式,而且是非常之强大的:也是系统ansible命令的集合,其利用yaml语言编写,运行过程,an ...

  7. Fiddler——抓取https接口配置(web,安卓,ios)

    作为一名合格的测试怎么能不会抓包呢.   抓包适用场景:   测试某个功能时,出现了bug,这时我们便需要抓包看一下这个bug到底是前端的还是服务端的: bug的精准指向,能加速bug得以解决.   ...

  8. Spring Security实现统一登录与权限控制

    1  项目介绍 最开始是一个单体应用,所有功能模块都写在一个项目里,后来觉得项目越来越大,于是决定把一些功能拆分出去,形成一个一个独立的微服务,于是就有个问题了,登录.退出.权限控制这些东西怎么办呢? ...

  9. 74CMS 3.0 存储型XSS漏洞

    一. 启动环境 1.双击运行桌面phpstudy.exe软件 2.点击启动按钮,启动服务器环境 二.代码审计 1.双击启动桌面Seay源代码审计系统软件 2.因为74CMS3.0源代码编辑使用GBK编 ...

  10. 千兆网数据CRC检验和过滤

    项目简述 本次项目在计算机将图像数据信息通过千兆网发送给FPGA后,由于接收到的数据可能混乱和无效,需要对数据CRC校验和无效包过滤. 项目原理及框图 对iddr_ctrl模块的输入数据和使能信号,分 ...