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 相关文章推荐
Uglifyjs(JS代码优化工具)入门 安装使用
Apr 13 Javascript
js中array的sort()方法使用介绍
Feb 20 Javascript
js 操作符汇总
Nov 08 Javascript
js实现右下角提示框的方法
Feb 03 Javascript
JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
Sep 18 Javascript
jQuery EasyUI之DataGrid使用实例详解
Jan 04 Javascript
js实现的下拉框二级联动效果
Apr 30 Javascript
再谈javascript常见错误及解决方法
Sep 16 Javascript
vue构建单页面应用实战
Apr 10 Javascript
layui 表格的属性的显示转换方法
Aug 14 Javascript
vue watch深度监听对象实现数据联动效果
Aug 16 Javascript
小程序点餐界面添加购物车左右摆动动画
Sep 23 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
DC游戏Steam周三特惠 《蝙蝠侠》阿卡姆系列平史低
2020/04/09 欧美动漫
php5.3 废弃函数小结
2010/05/16 PHP
php使用curl发送json格式数据实例
2013/12/17 PHP
php 判断字符串中是否包含html标签
2014/02/17 PHP
JavaScript版DateAdd和DateDiff函数代码
2012/03/01 Javascript
可简单避免的三个JS发布错误的详细介绍
2013/08/02 Javascript
js控制href内容的连接内容的变化示例
2014/04/30 Javascript
关于JS中的apply,call,bind的深入解析
2016/04/05 Javascript
原生javascript实现的ajax异步封装功能示例
2016/11/03 Javascript
AngularJs验证重复密码的方法(两种)
2016/11/25 Javascript
手机软键盘弹出时影响布局的解决方法
2016/12/15 Javascript
详解jquery validate实现表单验证 (正则表达式)
2017/01/18 Javascript
AngularJS的ng-repeat指令与scope继承关系实例详解
2017/01/21 Javascript
学习使用jQuery表单验证插件和日历插件
2017/02/13 Javascript
js轮播图的插件化封装详解
2017/07/17 Javascript
[02:10]DOTA2 TI10勇士令状玩法及不朽Ⅰ展示:焕新世界,如你所期
2020/05/29 DOTA
Python程序员开发中常犯的10个错误
2014/07/07 Python
Python GUI编程完整示例
2019/04/04 Python
python openvc 裁剪、剪切图片 提取图片的行和列
2019/09/19 Python
Pycharm+Python+PyQt5使用详解
2019/09/25 Python
python集合常见运算案例解析
2019/10/17 Python
Windows10+anacond+GPU+pytorch安装详细过程
2020/03/24 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
2020/05/07 Python
详解使用postMessage解决iframe跨域通信问题
2019/11/01 HTML / CSS
意大利火车票和铁路通行证专家:ItaliaRail
2019/01/22 全球购物
上海奥佳笔试题面试题
2016/11/16 面试题
大学生毕业自荐信
2013/10/10 职场文书
幼儿园教学管理制度
2014/02/04 职场文书
学生会个人自荐书范文
2014/02/12 职场文书
小学校本培训方案
2014/06/06 职场文书
党的群众路线教育实践活动对照检查材料(个人)
2014/09/24 职场文书
小学元宵节活动总结
2015/02/06 职场文书
社区五一劳动节活动总结
2015/02/09 职场文书
教师个人工作总结范文2015
2015/10/14 职场文书
Python实现制作销售数据可视化看板详解
2021/11/27 Python
实现GO语言对数组切片去重
2022/04/20 Golang