文章目录

  • 0. 给定一个数组
  • 1. find():查找成员对象
  • 2. findIndex():查找成员下标
  • 3. filter():过滤数组
  • 4. forEach():迭代数组
  • 5. some()和every():量词遍历
  • 6. map():变换
  • 7. reduce():规约

0. 给定一个数组

const arr = [{name: '袁绍',age: 33,title: '本初',index: 2},{name: '曹操',age: 40,title: '孟德',index: 1},{name: '刘备',age: 35,title: '玄德',index: 6},{name: '马超',age: 30,title: '孟起',index: 7},{name: '张飞',age: 28,title: '翼德',index: 3},{name: '关羽',age: 27,title: '云长',index: 4},{name: '赵云',age: 22,title: '子龙',index: 4},
]

1. find():查找成员对象

用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员。如果没有符合条件的成员,则返回undefined。find()返回的结果是一个对象。

const obj1 = arr.find(item => item.age < 30)
const obj2 = arr.find(item => item.index == 4)
const obj3 = arr.find(item => item.title !== '玄德')
const obj4 = arr.find(item => item.name.indexOf('关', 0) !== -1)console.log(obj1) //{"name": "张飞","age": 28,"title": "翼德","index": 3}
console.log(obj2) //{"name": "关羽","age": 27,"title": "云长","index": 4}
console.log(obj3) //{"name": "袁绍","age": 33,"title": "本初","index": 2}
console.log(obj4) //{"name": "关羽","age": 27,"title": "云长","index": 4}

字符串查找可参考这里

2. findIndex():查找成员下标

返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回-1。findIndex()返回的结果是一个整型的值。

const index1 = arr.findIndex(item => item.age < 30)
const index2 = arr.findIndex(item => item.index == 4)
const index3 = arr.findIndex(item => item.title !== '玄德')
const index4 = arr.findIndex(item => item.name.indexOf('关', 0) !== -1)console.log(index1) //4
console.log(index2) //5
console.log(index3) //0
console.log(index4) //5

3. filter():过滤数组

使用指定的回调函数测试所有数组元素,并创建一个包含所有通过测试的元素构成的新数组。filter()不改变原数组内容,返回的结果是一个新的数组。

const arr1 = arr.filter(item => item.age < 30)
const arr2 = arr.filter(item => item.index == 4)
const arr3 = arr.filter(item => item.title !== '玄德')
const arr4 = arr.filter(item => item.name.indexOf('关', 0) !== -1)console.log(arr1)
console.log(arr2)
console.log(arr3)
console.log(arr4)

返回值

注意:上边所述的函数都是有返回值的。因此,箭头函数体部分都是一个可以得到布尔值的表达式,而不是一个语句块{…}。当然也可以显式return一个具有布尔值的表达式。

4. forEach():迭代数组

遍历数组所有元素,利用回调函数对数组的每一个元素进行操作。不支持break或continue关键字。特别地,return只用于决定是否结束当前循环(不是整个循环),类似continue。forEach()仅是一个遍历操作,没有返回值——可理解为返回void。forEach()不会修改原来的数组。

let newArr = []
arr.forEach(item => {if (item.age < 30) {newArr.push(item.name)}
})newArr.forEach(item => {console.log(item)
})
/* 输出:
张飞
关羽
赵云
*/

既然是操作,箭头函数体部分当然要使用{…}语句块形式。

let nb
arr.forEach(item => {if (item.index === 4) { // 4可有两个呕!nb = item.name}
})console.log(nb) // 赵云//return到底有啥用?
let nb
arr.forEach(item => {if (item.index === 4) {nb = item.namereturn}
})console.log(nb) // 还是输出:赵云//再看
let nb
arr.forEach(item => {if (item.index === 4) {nb = item.namereturn // 相当于continueconsole.log(nb) //不被输出}
})

特殊方法修改原数组内容

let test = arr.forEach((item, index, input) => {input[index] = item.age + 10
})
console.log(test) // 没有返回值
console.log(arr) // 原数组被改了

结果

5. some()和every():量词遍历

两个函数都遍历数组中的所有元素。两个函数都返回布尔值。

  • some()
    存在量词,数组中只要存在(至少一个)满足条件的元素就返回true,否则返回false。
  • every()
    全称量词,数组中的元素必须都满足条件才返回true,否则返回false。
console.log(arr.some(item => item.age > 39)
) // trueconsole.log(arr.every(item => item.age < 30)
) // false

6. map():变换

依次处理数组中的每一个元素。每一个元素均被map()定义的回调函数进行变换,将变换后的元素再收集起来,最终返回一个新的数组。
map()不会对空数组进行处理,不会改变原始数组。

const newArr = arr.map(item => item.name)
console.log(newArr) //["袁绍","曹操","刘备","马超","张飞","关羽","赵云"]const newArr = arr.map(item => item.age > 30)
console.log(newArr) //[true,true,true,false,false,false,false]const newArr = arr.map(item => item.age > 30? 'A':'B')
console.log(newArr) //["A","A","A","B","B","B","B"]const newArr = arr.map(item => {if (item.index < 4) {return item}
})console.log(newArr)
/** 输出:
[{"name": "袁绍","age": 33,"title": "本初","index": 2},{"name": "曹操","age": 40,"title": "孟德","index": 1},null,null,{"name": "张飞","age": 28,"title": "翼德","index": 3},null,null
]
*/const newArr = arr.map(item => item.age + 10)
console.log(newArr) // [43,50,45,40,38,37,32]

数组成员是对象的变换

const newArr = arr.map(item => {let {name, age, title} = itemlet elem = {name,age: age+10,alias: title}return elem
})console.log(newArr)

结果

7. reduce():规约

这里“规约”类似于SQL中的聚合函数。即把一个数组表达的集合聚合为一个值——多个值变一个值。该函数最终返回一个单值。

// preVal:前一次调用reduce()的返回值;currVal:当前遍历到的数组元素
const totle = arr.reduce((preVal, currVal) => {return preVal + currVal.age
}, 0) // 0是初始值console.log(totle) //215

ES6形式常用的数组遍历函数相关推荐

  1. JS 常用字符串数组遍历函数方法整理

    目录 一.concat() 二.join() 三.push() 四.pop() 五.shift() 六.unshift() 七.slice() 九.substring() 和 substr() 十.s ...

  2. 几种常用的数组遍历方法

    整理一下常用的几种遍历方法,for和while循环就不再说了,说一下其他几种非常好用的方法 1.for in  for in可定是接触比较早的遍历数组的方法,其实它也可遍历对象(遍历字符串也是可以的! ...

  3. js常用的数组遍历map ()

    在项目开发中,常常会遇到组件返回值为对象数组,但后端要求的格式不相同如: const arr=[{a:'1',b:'2',c:'3'},{a:'4',b:'5',c:'6'}] //原数组//后端想要 ...

  4. js 数组遍历符合条件跳出循环体_Js数组遍历方法对比总结

    引言: ES6为javascript为数组遍历提供了新的一种方式: for....of.....那之前的遍历方法各存在哪些缺点?for...of...有什么好处?接下来,我们先回顾一下有多少种方式. ...

  5. 数组遍历的几种方法及用法

    一.for循环 for(let i = 0;i<arr.length;i++){console.log(arr[i])} 二.forEach方法 forEach是最简单.最常用的数组遍历方法,它 ...

  6. JS几种数组遍历方式以及性能分析对比

    前言 这一篇与上一篇 JS几种变量交换方式以及性能分析对比 属于同一个系列,本文继续分析JS中几种常用的数组遍历方式以及各自的性能对比 起由 在上一次分析了JS几种常用变量交换方式以及各自性能后,觉得 ...

  7. 【php基础入门】PHP中常用的数组操作使用方法笔记整理(推荐)

    PHP数组 数组是对大量数据进行有效组织和管理的手段之一,通过数组的强大功能,可以对大量性质相同的数据进行存储.排序.插入及删除等操作,从而可以有效地提高程序开发效率及改善程序的编写方式. 数组:是一 ...

  8. JavaScript 数组纯函数

    1. 常用的数组 API forEach 遍历所有元素,item 对应的是元素的值,index 对应的是元素的位置 let arr = [4, 6, 8]; arr.forEach(function( ...

  9. ES5和ES6数组遍历方法详解

    ES5和ES6数组遍历方法详解 在ES5中常用的10种数组遍历方法: 1.原始的for循环语句 2.Array.prototype.forEach数组对象内置方法 3.Array.prototype. ...

最新文章

  1. 写了一个测试正则表达式的小工具
  2. boost::exchange的测试程序
  3. wordpress发布文章时右侧边栏选择作者的功能代码
  4. 直播回顾:准确性提升到 5 秒级,ssar 独创的 load5s 指标有多硬核?| 龙蜥技术
  5. 查看总耗时_吉林德惠电力施工总承包资质代办
  6. SpringBoot2.0都更新了那些内容
  7. 电脑密码忘记怎么办??
  8. @程序员,2019 年软件开发新趋势必知!
  9. 科大讯飞 语音识别 VB WIN10 X64 VS2017
  10. 金蝶K3老单新增自定义菜单按钮
  11. 管理感情:精力有限,要么干活,要么内斗
  12. 计算机视觉--图像导数-图像梯度向量
  13. 【C语言】简单的飞机游戏
  14. JavaScript函数式编程之函子
  15. 【图像处理-计算机视觉学习路线】个人记录
  16. 华侨城集团欲借华侨城A 实现主业整合上市
  17. Android 在分享列表添加自己的应用
  18. conda安装tensorflow和conda常用命令
  19. 如何发表一篇核心期刊论文
  20. STM32基础——超声波测距+OLED显示+蜂鸣器报警

热门文章

  1. Ubuntu配置workon命令进入切换python虚拟环境
  2. 信息学奥赛一本通(c++):1405:质数的和与积
  3. 计算机毕业设计JAVA高校心理教育辅导mybatis+源码+调试部署+系统+数据库+lw
  4. 缓存和CPU和内存和磁盘的关系
  5. 恕瑞玛服务器维护,恕瑞玛 - 英雄联盟官方网站 - 腾讯游戏
  6. 详解二叉排序树(二叉搜索树、二叉查找树)以及Python实现相关操作
  7. 【c++经典小游戏,源码奉上(免费复制)】
  8. 计算机打印机共享失败,两台win7系统共享打印机提示不成功的解决方法
  9. 你有没有使用java生成过二维码?(一)
  10. 【社交电子商务时代下新媒体的运用思考】社交电子商务时代背景下新媒体应用的重要意义分析