JS数组reduce()方法原理及使用技巧解析


Posted in Javascript onJuly 14, 2020

1、语法

arr.reduce(callback,[initialValue])

reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组。

callback (执行数组中每个值的函数,包含四个参数)

1、previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))

2、currentValue (数组中当前被处理的元素)

3、index (当前元素在数组中的索引)

4、array (调用 reduce 的数组)

initialValue (作为第一次调用 callback 的第一个参数。)如果没有提供initialValue,reduce 会从索引1的地方开始执行 callback 方法,跳过第一个索引。如果提供initialValue,从索引0开始。

2、reduce的简单用法

var arr = [1, 2, 3, 4];
var sum = arr.reduce((x,y)=>x+y)
var mul = arr.reduce((x,y)=>x*y)
console.log( sum ); //求和,10
console.log( mul ); //求乘积,24

1) 计算数组中每个元素出现的次数

let names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];

let nameNum = names.reduce((pre,cur)=>{
 if(cur in pre){
  pre[cur]++
 }else{
  pre[cur] = 1 
 }
 return pre
},{})
console.log(nameNum); //{Alice: 2, Bob: 1, Tiff: 1, Bruce: 1}

2)数组去重

let arr = [1,2,3,4,4,1]
let newArr = arr.reduce((pre,cur)=>{
  if(!pre.includes(cur)){
   return pre.concat(cur)
  }else{
   return pre
  }
},[])
console.log(newArr);// [1, 2, 3, 4]

3)将二维数组转化为一维

let arr = [[0, 1], [2, 3], [4, 5]]
let newArr = arr.reduce((pre,cur)=>{
  return pre.concat(cur)
},[])
console.log(newArr); // [0, 1, 2, 3, 4, 5]

4)将多维数组转化为一维

let arr = [[0, 1], [2, 3], [4,[5,6,7]]]
const newArr = function(arr){
  return arr.reduce((pre,cur)=>pre.concat(Array.isArray(cur)?newArr(cur):cur),[])
}
console.log(newArr(arr)); //[0, 1, 2, 3, 4, 5, 6, 7]

5)对象里的属性求和

var result = [
  {
    subject: 'math',
    score: 10
  },
  {
    subject: 'chinese',
    score: 20
  },
  {
    subject: 'english',
    score: 30
  }
];

var sum = result.reduce(function(prev, cur) {
  return cur.score + prev;
}, 0);
console.log(sum) //60

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js实现权限树的更新权限时的全选全消功能
Feb 17 Javascript
jquery ajaxSubmit 异步提交的简单实现
Feb 28 Javascript
JavaScript分析、压缩工具JavaScript Analyser
Dec 31 Javascript
JQuery选择器绑定事件及修改内容的方法
Jan 23 Javascript
jQuery幻灯片带缩略图轮播效果代码分享
Aug 17 Javascript
基于javascript实现checkbox复选框实例代码
Jan 28 Javascript
强大Vue.js组件浅析
Sep 12 Javascript
浅析如何利用angular结合translate为项目实现国际化
Dec 08 Javascript
JS完成画圆圈的小球
Mar 07 Javascript
在JS中如何把毫秒转换成规定的日期时间格式实例
May 11 Javascript
详解vue-cli 接口代理配置
Dec 13 Javascript
webpack v4 从dev到prd的方法
Apr 02 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
Jul 14 #Javascript
详解javascript void(0)
Jul 13 #Javascript
Vue组件间数据传递的方式(3种)
Jul 13 #Javascript
vue-cli4项目开启eslint保存时自动格式问题
Jul 13 #Javascript
详解Vue+elementUI build打包部署后字体图标丢失问题
Jul 13 #Javascript
浅谈JavaScript中你可能不知道URL构造函数的属性
Jul 13 #Javascript
Vue3新特性之在Composition API中使用CSS Modules
Jul 13 #Javascript
You might like
PHP实现删除非站内外部链接实例代码
2014/06/17 PHP
PHPMailer发送HTML内容、带附件的邮件实例
2014/07/01 PHP
Yii+upload实现AJAX上传图片的方法
2016/07/13 PHP
PHP getDocNamespaces()函数讲解
2019/02/03 PHP
jqPlot Option配置对象详解
2009/07/25 Javascript
js使用Array.prototype.sort()对数组对象排序的方法
2015/01/28 Javascript
JQuery调用绑定click事件的3种写法
2015/03/28 Javascript
JS建造者模式基本用法实例分析
2015/06/30 Javascript
jqGrid表格应用之新增与删除数据附源码下载
2015/12/02 Javascript
Bootstrap学习笔记之js组件(4)
2016/06/12 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
BootstrapValidator实现注册校验和登录错误提示效果
2017/03/10 Javascript
vue select二级联动第二级默认选中第一个option值的实例
2018/01/10 Javascript
利用es6 new.target来对模拟抽象类的方法
2019/05/10 Javascript
如何解决js函数防抖、节流出现的问题
2019/06/17 Javascript
nuxt引入组件和公共样式的操作
2020/11/05 Javascript
Python语言编写电脑时间自动同步小工具
2013/03/08 Python
python写xml文件的操作实例
2014/10/05 Python
Python map和reduce函数用法示例
2015/02/26 Python
Python实现的生产者、消费者问题完整实例
2018/05/30 Python
python批量修改文件编码格式的方法
2018/05/31 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
2018/07/18 Python
python的常用模块之collections模块详解
2018/12/06 Python
Python自动发送邮件的方法实例总结
2018/12/08 Python
django创建最简单HTML页面跳转方法
2019/08/16 Python
python zip()函数使用方法解析
2019/10/31 Python
matplotlib quiver箭图绘制案例
2020/04/17 Python
Python实现播放和录制声音的功能
2020/08/12 Python
Python全局变量与global关键字常见错误解决方案
2020/10/05 Python
Giglio俄罗斯奢侈品购物网:男士、女士、儿童高级时装
2018/07/27 全球购物
英国复古服装购物网站:Collectif
2019/10/30 全球购物
环保建议书
2014/03/12 职场文书
竞选宣传委员演讲稿
2014/05/24 职场文书
会计试用期自我评价怎么写
2014/09/18 职场文书
超级礼物观后感
2015/06/15 职场文书
OpenFeign实现远程调用
2022/08/14 Java/Android