TS 之 reduce
一.函数介绍
Array.reduce()方法是对数组进行遍历,返回一个计算后的值
使用方法:
Array.reduce((acc, cur, idx, src) => { }, initialValue)
- callback回调函数接收4个参数:
Accumulator (acc) (累计器) 如果传入了initialValue,Accumulator的初始值就是initialValue,没传入就是数组的第一个值
Current Value (cur) (当前值)
Current Index (idx) (当前索引)如果传入了initialValue,索引从0开始,没传入从1开始
Source Array (src) (源数组)
initialValue 指定的初始值,初始值可以是数字,数组,对象
二.例子
2.1.数组求和
const arr = [1, 2, 3, 4, 5, 6];
let c = arr.reduce((a, b) => {
console.log(a, b);
return a + b;
});
console.log(c);
2.2.对象数组求和
const arr = [
{
name: '张三',
count: 1
},
{
name: '李四',
count: 2
},
{
name: '王五',
count: 3
},
{
name: '赵六',
count: 4
}
];
/**
* 对象数组求和
* pre:number
* cur:当前对象
* 最后的0:初始值
*/
const sum = arr.reduce((pre, cur) => {
console.log(pre, cur);
return pre + cur.count;
}, 0);
console.log(sum);
2.3.统计次数
/**
* 统计字母出现的个数
*/
let str = 'HelloWorld';
let arrStr = str.split('');
type TNumb = {
name: string;
count: number;
};
let arrFinal = arrStr.reduce((acc: TNumb[], cur: string): TNumb[] => {
let existItem = acc.find(it => it.name === cur);
if (!existItem) {
acc.push({ name: cur, count: 1 });
} else {
existItem.count++;
}
return acc;
}, []);
console.log(arrFinal);
2.4.求字符串数组中哪个出现的次数最多
let arr1 = ['李明', '韩梅梅', '张三', '李明', '李明', '张三', '韩梅梅', '李明', 'Jack', '韩梅梅'];
type TNumb = {
name: string;
count: number;
};
let arrFinal = arr1.reduce((acc: TNumb[], cur: string): TNumb[] => {
let existItem = acc.find(it => it.name === cur);
if (!existItem) {
acc.push({ name: cur, count: 1 });
} else {
existItem.count++;
}
return acc;
}, []);
console.log(arrFinal);
let a = arrFinal.reduce((acc: TNumb, cur: TNumb) => {
return acc.count > cur.count ? acc : cur;
});
console.log(a);
// 去重
let b = arrFinal.reduce((acc: string[], cur: TNumb) => {
if (!acc.includes(cur.name)) {
acc.push(cur.name);
}
return acc;
}, []);
console.log(b);
2.5.二维数组转一维数组
// 二维数组转一维数组
let numArr: number[][] = [];
numArr[0] = [1, 2, 3, 4];
numArr[1] = [5, 6, 7];
numArr[2] = [9, 10, 11];
let numArrNew = numArr.reduce((acc, cur) => {
return acc.concat(cur);
}, []);
console.log(numArrNew);
TS 之 reduce的更多相关文章
- Hive优化策略
hive优化目标 在有限的资源下,运行效率高. 常见问题 数据倾斜.Map数设置.Reduce数设置等 hive运行 查看运行计划 explain [extended] hql 例子 explain ...
- MapReduce剖析笔记之五:Map与Reduce任务分配过程
在上一节分析了TaskTracker和JobTracker之间通过周期的心跳消息获取任务分配结果的过程.中间留了一个问题,就是任务到底是怎么分配的.任务的分配自然是由JobTracker做出来的,具体 ...
- hive语句嵌入python脚本(进行map和reduce,实现左外连接)
在Hive语句中使用脚本(如python和shell)进行map和reduce:利用命令transform(或者指定map和reduce),配合加入的脚本文件add file 请看:http://ww ...
- vue + ts Vuex篇
Vuex对Typescript的支持,仍十分薄弱,官方库只是添加了一些.d.ts声明文件,并没有像vue 2.5这样内置支持. 第三方衍生库 vuex-typescript, vuex-ts-deco ...
- JS/TS 对数组中的对象按对象的值进行去重
举个例子:对以下数组按 lastName 的值进行去重 let listData = [ { firstName: "Rick", lastName: "Sanchez& ...
- Vue3.x+element-plus+ts踩坑笔记
闲聊 前段时间小颖在B站找了个学习vue3+TS的视频,自己尝试着搭建了一些基础代码,在实现功能的过程中遇到了一些问题,为了防止自己遗忘,写个随笔记录一下嘻嘻 项目代码 git地址:vue3.x-ts ...
- 用 vue3 中的 reduce(累加器) 随机生成100个字母,放入数组中,统计每个字母出现的次数
一.首先不用 reduce() 来实现 代码如下: <template lang=""> <div> <h1>统计每个字母出现的次数,不使用r ...
- JS的内建函数reduce
@(js) reduce函数,是ECMAScript5规范中出现的数组方法.在平时的工作中,相信大家使用的场景并不多,一般而言,可以通过reduce方法实现的逻辑都可以通过forEach方法来变相的实 ...
- MapReduce剖析笔记之七:Child子进程处理Map和Reduce任务的主要流程
在上一节我们分析了TaskTracker如何对JobTracker分配过来的任务进行初始化,并创建各类JVM启动所需的信息,最终创建JVM的整个过程,本节我们继续来看,JVM启动后,执行的是Child ...
- MapReduce剖析笔记之三:Job的Map/Reduce Task初始化
上一节分析了Job由JobClient提交到JobTracker的流程,利用RPC机制,JobTracker接收到Job ID和Job所在HDFS的目录,够早了JobInProgress对象,丢入队列 ...
随机推荐
- 页面导出为PDF
一.使用环境 Vue3.Quasar.Electron 二.安装 jspdf-html2canvas npm install jspdf-html2canvas --save 安装失败可以选择cnpm ...
- 如何使用源码编译安装Nginx服务器
安装 PCRE : 网站:http://pcre.org/ 下载: ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ ftp://ftp.c ...
- echarts饼图同时展示数量和百分比
要在ECharts中同时展示饼图数据的数量和百分比,可以使用ECharts中的formatter功能.下面是一个简单的示例,演示如何在饼图中显示数量和百分比: option = { tooltip: ...
- winform 更新下载压缩文件解压并覆盖
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Win10安装离线.NET3.5流程
二.安装步骤 1.将下载的安装包放到c盘windows目录下(根据需要放置) 2.用命令行安装 以管理员身份打开cmd,输入以下命令(c:\windows即文件放置目录,即上一步放置目录) dism. ...
- case语法案例
case语法案例 制作nginx启停脚本 1.条件: 2.思路: 3.脚本 添加删除openvppn用户的脚本 1.实现要求 2.具体脚本 case语法案例 制作nginx启停脚本 1.条件: 启动服 ...
- linux rpm 命令
# 产看软件包信息[root@devops201 k8s_install]# rpm -qi yum-utilsName : yum-utilsVersion : 1.1.31Release : 54 ...
- 将pyinstaller打包的exe文件制作成安装包
1. 下载安装 inno setup (下载地址:http://www.jrsoftware.org/isdl.php) 2. 配置inno setup中文语言包 inno setup默认并没有中文, ...
- MATH1851 Trigonometric Formula Notes
大学里老师都默认我们学过 正割 \(\sec\),余割 \(\csc\) 与余切 \(\cot\) 再加上高中的一些公式都有点遗忘,开个贴做个笔记 常规的 \(\sin x, \cos x, \tan ...
- Stream流常用API
文档 https://www.runoob.com/java/java8-streams.html JDK8 Stream API: https://docs.oracle.com/javase/8/ ...