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得到网页中所有的div的id
Oct 19 Javascript
js获取元素在浏览器中的绝对位置
Jul 24 Javascript
js中关于String对象的replace使用详解
May 24 Javascript
MooBox 基于Mootools的对话框插件
Jan 20 Javascript
js+xml生成级联下拉框代码
Jul 24 Javascript
用JavaScript实现动画效果的方法
Jul 20 Javascript
JavaScript头像上传插件源码分享
Mar 29 Javascript
jQuery插件WebUploader实现文件上传
Nov 07 Javascript
jQuery实现弹出窗口弹出div层的实例代码
Jan 09 Javascript
微信小程序中post方法与get方法的封装
Sep 26 Javascript
学习jQuery中的noConflict()用法
Sep 28 jQuery
微信小程序的tab选项卡的实现效果
May 15 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
通过html表格发电子邮件
2006/10/09 PHP
PHP 处理TXT文件(打开/关闭/检查/读取)
2013/05/13 PHP
PHP获取当前页面完整URL的实现代码
2013/06/10 PHP
PHP清除数组中所有字符串两端空格的方法
2014/10/20 PHP
Smarty中常用变量操作符汇总
2014/10/27 PHP
php实例化一个类的具体方法
2019/09/19 PHP
js 页面刷新location.reload和location.replace的区别小结
2009/12/24 Javascript
DB.ASP 用Javascript写ASP很灵活很好用很easy
2011/07/31 Javascript
JS+flash实现chrome和ie浏览器下同时可以复制粘贴
2013/09/22 Javascript
js判断选择时间不能小于当前时间的示例代码
2013/09/24 Javascript
实例讲解避免javascript冲突的方法
2016/01/03 Javascript
javascript实现瀑布流加载图片原理
2016/02/02 Javascript
Javascript 函数的四种调用模式
2016/11/05 Javascript
微信小程序 flex实现导航实例详解
2017/04/26 Javascript
使用vue-cli打包过程中的步骤以及问题的解决
2018/05/08 Javascript
vue移动端实现红包雨效果
2020/06/23 Javascript
JavaScript引用类型Object常见用法实例分析
2018/08/08 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
2018/09/16 Javascript
vue.extend与vue.component的区别和联系
2018/09/19 Javascript
vue中v-for通过动态绑定class实现触发效果
2018/12/06 Javascript
Vue 开发必须知道的36个技巧(小结)
2019/10/09 Javascript
Websocket 向指定用户发消息的方法
2020/01/09 Javascript
原生js+canvas实现贪吃蛇效果
2020/08/02 Javascript
对于Python中线程问题的简单讲解
2015/04/03 Python
Python的Django框架中的数据库配置指南
2015/07/17 Python
使用Python来编写HTTP服务器的超级指南
2016/02/18 Python
Python编程实现的简单Web服务器示例
2017/06/22 Python
TensorFlow用expand_dim()来增加维度的方法
2018/07/26 Python
在Mac上删除自己安装的Python方法
2018/10/29 Python
selenium python 实现基本自动化测试的示例代码
2019/02/25 Python
乡镇办公室工作决心书
2014/03/11 职场文书
中国在我心中演讲稿
2014/09/13 职场文书
公司领导班子对照检查存在问题整改措施
2014/10/02 职场文书
幼儿园法制宣传日活动总结
2014/11/01 职场文书
百日宴上的祝酒词
2015/08/10 职场文书
2019数学教师下学期工作总结
2019/06/27 职场文书