TS 之 reduce
2024-09-18 20:57:43
一.函数介绍
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);
最新文章
- sql注入时易被忽略的语法技巧以及二次注入
- IOS系统基础知识
- 曲面之美:三星 S6 Edge+
- 使用ajaxfileupload.js实现文件上传
- HTML内联元素
- My Game --简介
- Spring源码学习之:@async 方法上添加该注解实现异步调用的原理
- 新浪微博客户端(31)-显示相册图片上的GIF标记
- winform中treeview中节点选中的技巧
- org.apache.ibatis.reflection.ReflectionException
- ubuntu 更新软件源
- 汇编学习笔记(3)[bx]和loop
- 判别linux机器字节序为大端还是小端
- Spring中配置数据源常用的形式
- 显存充足,但是却出现CUDA error:out of memory错误
- CentOS 7 输入中文 &; 安装搜狗输入法
- 介绍一个axios调试好用的工具:axios-mock-adapter
- Spring注解之@Lazy注解
- android开发(42) 使用andorid操作蓝牙打印机
- Maven安装及MyEclipse中使用Maven
热门文章
- cannot import name 'detail_route' from 'rest_framework.decorators'的解决办法
- 1223. 掷骰子模拟 (Hard)
- django搭建简易blog
- css实现一个冰墩墩
- P1046	[NOIP2005 普及组] 陶陶摘苹果
- rtl8188eu 关闭power save
- span&;不同字体
- CF1268B题解
- 新手入门Neo4j,手把手完整教学
- Rstudio 快捷键无法使用