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 相关文章推荐
javascript 得到变量类型的函数
May 19 Javascript
javascript AOP 实现ajax回调函数使用比较方便
Nov 20 Javascript
js监听输入框值的即时变化onpropertychange、oninput
Jul 13 Javascript
如何使用jQuery来处理图片坏链具体实现步骤
May 02 Javascript
jQuery遍历对象、数组、集合实例
Nov 08 Javascript
javascript数组排序汇总
Jul 07 Javascript
jQuery Easyui快速入门教程
Aug 21 Javascript
使用JSON作为函数的参数的优缺点
Oct 27 Javascript
JSON 数据详解及实例代码分析
Jan 20 Javascript
Spring Boot+AngularJS+BootStrap实现进度条示例代码
Mar 02 Javascript
javascript设计模式 ? 迭代器模式原理与用法实例分析
Apr 17 Javascript
详解vue-router的导航钩子(导航守卫)
Nov 02 Javascript
利用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
收音机频率指针指示不准确和灵敏度低问题
2021/03/02 无线电
header()函数使用说明
2006/11/23 PHP
Breeze 文章管理系统 v1.0.0正式发布
2006/12/14 PHP
实用函数3
2007/11/08 PHP
DOM XPATH获取img src值的query
2013/09/23 PHP
Yii2增删改查之查询 where参数详细介绍
2016/08/08 PHP
php动态读取数据清除最右边距的方法
2017/04/12 PHP
在Javascript中定义对象类别
2006/12/22 Javascript
jquery判断单个复选框是否被选中的代码
2009/09/03 Javascript
js加强的经典分页实例
2013/03/15 Javascript
js中一个函数获取另一个函数返回值问题探讨
2013/11/21 Javascript
一个简单的jquery的多选下拉框(自写)
2014/05/05 Javascript
jQuery中:input选择器用法实例
2015/01/03 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
2015/12/24 Javascript
Javascript必知必会(四)js类型转换
2016/06/08 Javascript
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
2017/07/18 Javascript
vue 中动态绑定class 和 style的方法代码详解
2018/06/01 Javascript
详解如何使用koa实现socket.io官网的例子
2018/11/04 Javascript
详解Vue2.0组件的继承与扩展
2018/11/23 Javascript
使用微信SDK自定义分享的方法
2019/07/03 Javascript
在vs code 中如何创建一个自己的 Vue 模板代码
2020/11/10 Javascript
Python可跨平台实现获取按键的方法
2015/03/05 Python
Python中将字典转换为XML以及相关的命名空间解析
2015/10/15 Python
Python安装selenium包详细过程
2019/07/23 Python
使用Python自动生成HTML的方法示例
2019/08/06 Python
关于tf.matmul() 和tf.multiply() 的区别说明
2020/06/18 Python
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
Snapfish英国:在线照片打印和个性化照片礼品
2017/01/13 全球购物
美国第二大连锁药店:Rite Aid
2019/04/03 全球购物
ajax是什么及其工作原理
2012/02/08 面试题
打架检讨书100字
2014/01/08 职场文书
购房意向书
2014/04/01 职场文书
管理岗位竞聘演讲稿
2014/08/18 职场文书
消防宣传语大全
2015/07/13 职场文书
班级管理经验交流材料
2015/11/02 职场文书
JavaScript架构localStorage特殊场景下二次封装操作
2022/06/21 Javascript