Array数组对象中的forEach、map、filter及reduce详析


Posted in Javascript onAugust 02, 2018

前言

刚才某人问了我一个问题。map怎么遍历,我刷刷刷就是一顿写。遍历么,forEach么,妥妥的。

var map = new Map();
map.set('item1', 'value1')
map.set('item2', 'value2')
map.forEach(function(value, key, map) {
 console.log("Key: %s, Value: %s", key, value);
});

好吧,我写完了之后,他发给我了一句话。 [].forEach()改成[].map()怎么用?

what?我这个暴脾气。。。。我当然是详细的说一下Array的常规遍历方法以及场景了。

Array.filter

语法

var new_arr = arr.filter(callback(element, index, array){

}, this)

参数

callback 回调
    element 当前的value
    index   当前的索引值
    array   arr这个数组对象
this 回调的this指向

返回值

Array 类型
//符合条件的值组成的数组

用法

//如果返回值是true的话,就是符合条件。
//filter 不会改变原数组,它返回过滤后的新数组。
//这个里返回数组里面的偶数
[10,11,12,13].filter((v)=>v % 2 == 0)
//只要审核通过的。当然正常情况下,对象比这个复杂一些。
[{state:1},{state:0},{state:0},{state:0}].filter((v)=>v.state == 1)
//只要成年人,记录是有效的
[{age:18,state:1},{age:16,state:0},{age:21,state:0}].filter((v)=>v.state == 1 && v.age > 17)

场景

场景就是过滤,把符合条件的整理到一起,常见的就是展示审核通过的数据,只显示关注我的人,只显示妹子,对吧糙汉子就过滤不看了。

Array.forEach

语法

arr.forEach(callback(element, index, array){

}, this)

参数

callback 回调
    element 当前的value
    index   当前的索引值
    array   arr这个数组对象
this 回调的this指向

返回值

undefined
// 这个东西没有返回值

用法

//遍历数组。打印到控制台
[10,11,12,13].forEach((v)=>{
 console.log(v)
})
// 成功的收集到success里面,错误的收集到error里面。
var success = [],error = [];
[{state:1},{state:0},{state:0},{state:0}].forEach((v)=>{
 if(v.state == 1){
  success.push(v)
 }else{
  error.push(v)
 }
})
// 给20岁的小姐姐打招呼
[{state:1,age: 1},{state:0,age: 20},{state:0,age: 19},{state:0,age: 31}].forEach((v)=>{
 if(v.age == 20){
  console.log('你好啊,我今年正好80')
 }
})

场景

比如说绑定事件,比如判断值然后push到不同的地方

Array.map

语法

arr.map(callback(element, index, array){

}, this)

参数

callback 回调
    element 当前的value
    index   当前的索引值
    array   arr这个数组对象
this 回调的this指向

返回值

array 数组
// 每个回调的返回值组成的新数组

用法

//把数值格式化,保留两位小数
[10.055,11.054,12.056,13.789].map((v)=>+v.toFixed(2))

场景

这个一般就用在,我需要一组值,但是这个值不对,需要计算原数组来生成。

Array.reduce

语法

arr.reduce(callback(accumulator, element, index, array){

}, initialValue)

参数

callback 回调
    sum     累加器的返回值,也就是上一次回调的返回值
    element 当前的value
    index   当前的索引值
    array   arr这个数组对象
initialValue 初始传入的值,如果不传回调从下标1开始,下标0作为初始值

返回值

//返回最后一次回调的值

用法

//累加
[10,11,12,13].reduce((s,v)=>s+v,0)

场景

这个计算整个数组得出一个值的

对比

  • forEach没有返回值,重点是function里面处理逻辑
  • map有返回值,重点是function返回值,组成新数组
  • filter有返回值,重点是function返回值,过滤之后组成新数组
  • reduce有返回值,重点是计算数组,返回一个值

昨天晚上下班着急跑路,还差一些例子没往上整理,今天补上

例子

大家可以尝试写写,有好的例子能更好的说明函数的作用也可以在评论区提出来,有好的解决方案也可以写出来。

有一组用户信息按手机号降序排序,输出用户名称,用逗号分隔

[{name: 'l1', phone: '1507539'},{name: 'l2', phone: '1507540'},{name: 'l3', phone: '1507541'},{name: 'l4', phone: '1507538'}]
 .sort((n,m)=>n.phone<m.phone)
 .map(m=>m.name)
 .join(',')

给元素绑事件

[].slice.call(document.querySelectorAll('div'))
 .forEach(v=>v.addEventListener('click',e=>console.log(e.target.className)))

获取所有元素的class,过滤空串

[].slice.call(document.querySelectorAll('*'))
 .map(v=>v.className)
 .filter(v=>v)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
经常用的图片在容器中的水平垂直居中实例
Jun 10 Javascript
js读取本地excel文档数据的代码
Nov 11 Javascript
javascript封装 Cookie 应用接口
Aug 07 Javascript
JavaScript必知必会(五) eval 的使用
Jun 08 Javascript
Angular 页面跳转时传参问题
Aug 01 Javascript
基于js中document.cookie全面解析
Sep 14 Javascript
垃圾回收器的相关知识点总结
May 13 Javascript
koa上传excel文件并解析的实现方法
Aug 09 Javascript
解决Angular4项目部署到服务器上刷新404的问题
Aug 31 Javascript
Layui实现带查询条件的分页
Jul 27 Javascript
JS实现时间校验的代码
May 25 Javascript
vue实现无缝轮播效果(跑马灯)
May 14 Vue.js
利用Blob进行文件上传的完整步骤
Aug 02 #Javascript
vue.js图片转Base64上传图片并预览的实现方法
Aug 02 #Javascript
vue组件横向树实现代码
Aug 02 #Javascript
利用Node.js批量抓取高清妹子图片实例教程
Aug 02 #Javascript
在微信小程序里使用watch和computed的方法
Aug 02 #Javascript
在小程序中使用Echart图表的示例代码
Aug 02 #Javascript
node.js读取Excel数据(下载图片)的方法示例
Aug 02 #Javascript
You might like
PHP form 表单传参明细研究
2009/07/17 PHP
apache+php完美解决301重定向的两种方法
2011/06/08 PHP
PHP goto语句简介和使用实例
2014/03/11 PHP
PHP中UNIX时间戳和日期间的转换与计算实例
2014/11/19 PHP
浅谈laravel框架sql中groupBy之后排序的问题
2019/10/17 PHP
JS getStyle获取最终样式函数代码
2010/04/01 Javascript
JQuery操作三大控件(下拉,单选,复选)的方法
2013/08/06 Javascript
html向js方法传递参数具体实现
2013/08/08 Javascript
图片上传插件jquery.uploadify详解
2013/11/15 Javascript
javascript内置对象操作详解
2015/02/04 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
2015/09/17 Javascript
基于jQuery实现返回顶部实例代码
2016/01/01 Javascript
详解nodejs 文本操作模块-fs模块(二)
2016/12/22 NodeJs
原生js实现简单的Ripple按钮实例代码
2017/03/24 Javascript
jquery点赞功能实现代码 点个赞吧!
2020/05/29 jQuery
提高Node.js性能的应用技巧分享
2017/08/10 Javascript
JavaScript中常见内置函数用法示例
2018/05/14 Javascript
Babel 入门教程学习笔记
2018/06/13 Javascript
Vuejs2 + Webpack框架里,模拟下载的实例讲解
2018/09/05 Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
2019/09/12 Javascript
使用vue-cli4.0快速搭建一个项目的方法步骤
2019/12/04 Javascript
js+canvas绘制图形验证码
2020/09/21 Javascript
深入解析Python编程中JSON模块的使用
2015/10/15 Python
Python基础篇之初识Python必看攻略
2016/06/23 Python
使用django的ORM框架按月统计近一年内的数据方法
2019/07/18 Python
Django Python 获取请求头信息Content-Range的方法
2019/08/06 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
python 日志 logging模块详细解析
2020/03/31 Python
浅析pandas随机排列与随机抽样
2021/01/22 Python
阿迪达斯芬兰官方网站:adidas芬兰
2017/01/30 全球购物
美国专业汽车音响和移动电子产品零售商:Car Toys
2019/05/13 全球购物
工程管理专业毕业生自荐信
2014/01/24 职场文书
工伤事故赔偿协议书范文
2014/09/24 职场文书
思想纪律作风整顿剖析材料
2014/10/11 职场文书
介绍信格式样本
2015/05/05 职场文书
大学生学生会工作总结2015
2015/05/26 职场文书