博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数组的reduce用法
阅读量:5923 次
发布时间:2019-06-19

本文共 2005 字,大约阅读时间需要 6 分钟。

定义

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。对空数组是不会执行回调函数的。

语法

array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

参数

图片描述

var arr = [2,4,6,7,3];// 前面两个是必须, 0表示传递给函数的初始值arr.reduce((total, currentValue, currentIndex, arr) => {         // 这里total指初始值, 或者计算结束后的返回值,          console.log(total);              // 0          console.log(currentValue);       // 2          console.log(currentIndex);       // 0          console.log(arr);                // [2,4,6,7,3]}, 0)

几种常见用法

1、计算数组总数

var res = arr.reduce((total,num) => {        return total + num;    })    console.log(res)   // 22

2、合并二维数组

var red = [[0,1],[2,3],[4,5]].reduce((a,b) => {            return a.concat(b)    },[])    console.log(red)   // [0, 1, 2, 3, 4, 5]

3、统计一个数组中有多少个不重复的单词

function getWordCnt1() {     return reg.reduce((prev, next) => {           prev[next] = (prev[next] + 1) || 1;           return prev;    }, {})}console.log(getWordCnt1())    // {apple: 2, orange: 3, pear: 1}

4、去重

var reh = [2,4,5,3,2,4,1]function distinct(reh) {     return reh.reduce((prev, cur) => {           return prev.indexOf(cur) != -1? prev : [...prev, cur]     },[])}console.log(distinct(reh))   // [2,4,5,3,1]

扩展

前几天刷脉脉,看到一个面试题,要求把数组里name相等的去重,并且menu求重复的总和

var arr = [       {name: 'a', menu: 2},       {name: 'a', menu: 21},       {name: 'g', menu: 2},       {name: 'g', menu: 3},       {name: 'g', menu: 3},       {name: 'c', menu: 4},       {name: 'c', menu: 44},]

如果用reduce做也是非常简单,直接上代码

let reg= Object.entries(arr.reduce((result,obj) => {            result[obj.name] = (result[obj.name] + obj.menu) || obj.menu            return result;        }, {})).map(obj => {            return {                name: obj[0],                menu: obj[1]    }    })console.log(reg)   // [{name: "a", menu: 23}, {name: "g", menu: 8}, {name: "c", menu: 48}]

总结

reduce(callback,initiaValue)会传入两个变量,回调函数(callback)和初始值(initiaValue)
如果没有传入初始值,则 reduce 方法会对从第二个元素开始的每个元素调用callback函数
如果提供了初始值(initiaValue),则 reduce 方法会对数组中的每个元素调用一次callback函数

转载地址:http://qwsvx.baihongyu.com/

你可能感兴趣的文章
MySql-8.0.12 安装教程随笔
查看>>
os模块
查看>>
vue实战记录(一)- vue实现购物车功能之前提准备
查看>>
51nod 1101 换零钱 【完全背包变形/无限件可取】
查看>>
回溯法练习【BFS/DFS】
查看>>
Python-CSS 基础
查看>>
正则基础之——贪婪与非贪婪模式
查看>>
Flask中路由模块的实现
查看>>
修改的样式没有更新
查看>>
转载:python异常之 GeneratorExit
查看>>
Avogadro
查看>>
[HDU1890]RoboticSort
查看>>
升学——妹妹小鱼儿升学所让我想到的
查看>>
怎样面试产品经理
查看>>
bootstrap 对话框调用 iframe
查看>>
grep, sed 与 awk 补补课,到底怎么用!
查看>>
关于sql注入
查看>>
python笔记(四)文件操作和函数
查看>>
JavaScript异常处理和事件处理
查看>>
SQL Server笔记
查看>>