前端Array.reduce()函数延申用法

ops/2024/9/24 13:17:06/

1.求和

javascript">// 求和const sum = (arr) => arr.reduce((acc,cur) => acc + cur,0)let arr = [1,2,3,4,5]console.log('参数为:',arr);console.log('总和:',sum(arr));

2.求积

javascript">//求积const sum1 = (arr) => arr.reduce((acc,cur) => acc * cur,1)let arr1 = [1,2,3,4,5]console.log('参数为:',arr1);console.log('积:',sum1(arr1));

3.扁平化数组

javascript">//扁平化数组const flatten = (arr) => arr.reduce((acc,curr) => acc.concat(curr),[])let arr2 = [[1,2],[3,4],[5]]console.log("参数为:",arr2);console.log('转化结果为:',flatten(arr2));

4.平均值

javascript">//平均值const average = (arr) => arr.reduce((acc,curr) => acc + curr,0)/arr.lengthlet arr3 = [1,2,3,4,5]console.log("参数为:",arr3);console.log('平均值为:',average(arr3));

5.最大值

javascript">//最大值 Number.NEGATIVE_INFINITY 意思就是最小值 保证第一次比较必须获胜const max = (arr) => arr.reduce((acc,curr) => Math.max(acc,curr),Number.NEGATIVE_INFINITY)let arr4 = [1, 2, 3, 4, 5];console.log("参数为:", arr4);console.log("结果为:", max(arr4));

6.最小值

javascript">//最大值 Number.POSITIVE_INFINITY 意思就是最大值 保证第一次比较必须获胜const min = (arr) => arr.reduce((acc, curr) => Math.min(acc, curr), Number.POSITIVE_INFINITY);let arr5 = [1, 2, 3, 4, 5];console.log("参数为:", arr5);console.log("结果为:", min(arr));

7.阶乘函数

javascript">// 阶乘函数 表示一个正整数的阶乘,即所有小于及等于该数的正整数的乘积。const factorial = (n) => Array.from({ length: n }, (_, i) => i + 1).reduce((acc, curr) => acc * curr, 1);//  Array.from({ length: n }, (_, i) => i + 1) 生成数组数据 [1,2,3,4,5]console.log(Array.from({ length: 5 }, (_, i) => i + 1));console.log("参数为:", 5);console.log("结果为:", factorial(5));

8.数组去重

javascript">// 数组去重const unique = (arr) => arr.reduce((acc, curr) => acc.includes(curr) ? acc : [...acc, curr], []);let arr6 = [1, 2,3,4,2, 3, 4, 5];console.log("参数为:", arr6);console.log("结果为:", unique(arr6));

9.元素计数

javascript">// 元素计数const countOccurrences = (arr) => arr.reduce((acc, curr) => {console.log(acc,curr)console.log(acc[curr])acc[curr] = (acc[curr] || 0) + 1;console.log(acc[curr])return acc;}, {});let arr7 = [1, 2,3,4,2, 3, 4, 5];console.log("参数为:", arr7);console.log("结果为:", countOccurrences(arr7));

10.并集函数

javascript">// 并集函数const union = (...arrays) => arrays.reduce((acc, curr) => {console.log('1111111111',acc,curr);return [...new Set([...acc, ...curr])]}, []);let arr8 = [1, 2,3,4,2, 3, 4, 5,7];let arr9 = [1, 2, 3, 4, 5];console.log("参数为:", arr8,arr9);console.log("结果为:", union(arr8,arr9),[...new Set([...arr8, ...arr9])]);

11.交集函数

javascript">// 交集函数const intersection = (...arrays) => arrays.reduce((acc, curr) => acc.filter(value => curr.includes(value)));let arr10 = [1, 2,3,4,2, 3, 4, 5];let arr11 = [1, 2, 4, 5];console.log("参数为:", arr10,arr11);console.log("结果为:", intersection(arr10,arr11));  // 再去下重就行了

12.差集函数

javascript">//差集函数 属于集合A不属于集合Bconst difference = (arr1, arr2) => arr1.reduce((acc, curr) => {console.log('2222222222222',acc,curr);return arr2.includes(curr) ? acc : [...acc, curr]}, []);let arr12 = [1, 2,3,4,2, 3, 4, 5,9];let arr13 = [1, 2, 3, 4, 5,7,8];console.log("参数为:", arr12,arr13);console.log("结果为:", difference(arr12,arr13));

13.对称差集函数

javascript">// 对称差集函数  反着来一下再组装一下const difference1 = (arr1, arr2) => arr1.reduce((acc, curr) => arr2.includes(curr) ? acc : [...acc, curr], []);const symmetricDifference = (arr1, arr2) => [...difference1(arr1, arr2), ...difference1(arr2, arr1)];let arr14 = [1, 2,3,4,2, 3, 4, 5,9];let arr15 = [1, 2, 3, 4, 5,7,8];console.log("参数为:", arr14,arr15);console.log("结果为:", symmetricDifference(arr14,arr15));

14.切片函数

javascript">// 切片函数const chunk = (arr, size) => arr.reduce((acc, _, i) => i % size === 0 ? [...acc, arr.slice(i, i + size)] : acc, []);let arr16 = [1, 2,3,4,2, 3, 4, 5,9];console.log("参数为:", arr16);console.log("结果为:", chunk(arr16,4));

15.分组函数

javascript">// 分组函数const groupBy = (arr, key) => arr.reduce((acc, obj) => {const groupKey = obj[key];acc[groupKey] = [...(acc[groupKey] || []), obj];return acc;}, {});let arr17 = [{ id: 1, name: '微芒不朽' }, { id: 2, name: '微芒' }, { id: 3, name: '微芒不朽' }];console.log("参数为:", arr);console.log("结果为:", groupBy(arr17,"name"));

16.数组去重假值

javascript">// 16. 数组去除假值/空值const compact = (arr) => arr.reduce((acc, curr) => curr ? [...acc, curr] : acc, []);let arr18 = [0, 1, false, 2, '', 3]console.log("参数为:", arr18);console.log("结果为:", compact(arr18,"name"));

17.去除指定元素

javascript">// 去除指定元素const removeItem = (arr, item) => arr.reduce((acc, curr) => curr === item ? acc : [...acc, curr], []);let arr19 = [1, 2, 3, 4, 2, 5]console.log("参数为:", arr19);console.log("结果为:", removeItem(arr19,2));

18.修饰函数

javascript"> // 修饰函数const mapArray = (arr, fn) => arr.reduce((acc, curr) => [...acc, fn(curr)], []);let arr20 = [1, 2, 3, 4, 2, 5]console.log("参数为:", arr20,(x)=>x+2);console.log("结果为:", mapArray(arr20,(x)=>x+2));

完整代码

javascript"><!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><script>// 重写console.log样式function randomColor() {let r = Math.floor(Math.random()*256);let g = Math.floor(Math.random()*256);let b = Math.floor(Math.random()*256);//返回随机生成的颜色return "rgb("+r+","+g+","+b+")";}console.log = (function(oriLogFunc){return function(...data){const icons = [ "⚽", "⭕", "❌", "❓", "❗"]const icon = icons[Math.floor(Math.random() * icons.length)];const bgColor = randomColor()const color = randomColor()oriLogFunc.call(console,`%c ${icon} `, `border-radius:5px;padding:12px;border:1px solid #000;color: #43bb88;font-size: 16px;font-weight: bold;text-decoration: underline;`, ...data);}})(console.log);// 求和const sum = (arr) => arr.reduce((acc,cur) => acc + cur,0)let arr = [1,2,3,4,5]console.log('参数为:',arr);console.log('总和:',sum(arr));//求积const sum1 = (arr) => arr.reduce((acc,cur) => acc * cur,1)let arr1 = [1,2,3,4,5]console.log('参数为:',arr1);console.log('积:',sum1(arr1));//扁平化数组const flatten = (arr) => arr.reduce((acc,curr) => acc.concat(curr),[])let arr2 = [[1,2],[3,4],[5]]console.log("参数为:",arr2);console.log('转化结果为:',flatten(arr2));//平均值const average = (arr) => arr.reduce((acc,curr) => acc + curr,0)/arr.lengthlet arr3 = [1,2,3,4,5]console.log("参数为:",arr3);console.log('平均值为:',average(arr3));//最大值 Number.NEGATIVE_INFINITY 意思就是最小值 保证第一次比较必须获胜const max = (arr) => arr.reduce((acc,curr) => Math.max(acc,curr),Number.NEGATIVE_INFINITY)let arr4 = [1, 2, 3, 4, 5];console.log("参数为:", arr4);console.log("结果为:", max(arr4));//最大值 Number.POSITIVE_INFINITY 意思就是最大值 保证第一次比较必须获胜const min = (arr) => arr.reduce((acc, curr) => Math.min(acc, curr), Number.POSITIVE_INFINITY);let arr5 = [1, 2, 3, 4, 5];console.log("参数为:", arr5);console.log("结果为:", min(arr));// 阶乘函数 表示一个正整数的阶乘,即所有小于及等于该数的正整数的乘积。const factorial = (n) => Array.from({ length: n }, (_, i) => i + 1).reduce((acc, curr) => acc * curr, 1);//  Array.from({ length: n }, (_, i) => i + 1) 生成数组数据 [1,2,3,4,5]console.log(Array.from({ length: 5 }, (_, i) => i + 1));console.log("参数为:", 5);console.log("结果为:", factorial(5));// 数组去重const unique = (arr) => arr.reduce((acc, curr) => acc.includes(curr) ? acc : [...acc, curr], []);let arr6 = [1, 2,3,4,2, 3, 4, 5];console.log("参数为:", arr6);console.log("结果为:", unique(arr6));// 元素计数const countOccurrences = (arr) => arr.reduce((acc, curr) => {console.log(acc,curr)console.log(acc[curr])acc[curr] = (acc[curr] || 0) + 1;console.log(acc[curr])return acc;}, {});let arr7 = [1, 2,3,4,2, 3, 4, 5];console.log("参数为:", arr7);console.log("结果为:", countOccurrences(arr7));// 并集函数const union = (...arrays) => arrays.reduce((acc, curr) => {console.log('1111111111',acc,curr);return [...new Set([...acc, ...curr])]}, []);let arr8 = [1, 2,3,4,2, 3, 4, 5,7];let arr9 = [1, 2, 3, 4, 5];console.log("参数为:", arr8,arr9);console.log("结果为:", union(arr8,arr9),[...new Set([...arr8, ...arr9])]);// 交集函数const intersection = (...arrays) => arrays.reduce((acc, curr) => acc.filter(value => curr.includes(value)));let arr10 = [1, 2,3,4,2, 3, 4, 5];let arr11 = [1, 2, 4, 5];console.log("参数为:", arr10,arr11);console.log("结果为:", intersection(arr10,arr11));  // 再去下重就行了//差集函数 属于集合A不属于集合Bconst difference = (arr1, arr2) => arr1.reduce((acc, curr) => {console.log('2222222222222',acc,curr);return arr2.includes(curr) ? acc : [...acc, curr]}, []);let arr12 = [1, 2,3,4,2, 3, 4, 5,9];let arr13 = [1, 2, 3, 4, 5,7,8];console.log("参数为:", arr12,arr13);console.log("结果为:", difference(arr12,arr13));// 对称差集函数  反着来一下再组装一下const difference1 = (arr1, arr2) => arr1.reduce((acc, curr) => arr2.includes(curr) ? acc : [...acc, curr], []);const symmetricDifference = (arr1, arr2) => [...difference1(arr1, arr2), ...difference1(arr2, arr1)];let arr14 = [1, 2,3,4,2, 3, 4, 5,9];let arr15 = [1, 2, 3, 4, 5,7,8];console.log("参数为:", arr14,arr15);console.log("结果为:", symmetricDifference(arr14,arr15));// 切片函数const chunk = (arr, size) => arr.reduce((acc, _, i) => i % size === 0 ? [...acc, arr.slice(i, i + size)] : acc, []);let arr16 = [1, 2,3,4,2, 3, 4, 5,9];console.log("参数为:", arr16);console.log("结果为:", chunk(arr16,4));// 分组函数const groupBy = (arr, key) => arr.reduce((acc, obj) => {const groupKey = obj[key];acc[groupKey] = [...(acc[groupKey] || []), obj];return acc;}, {});let arr17 = [{ id: 1, name: '微芒不朽' }, { id: 2, name: '微芒' }, { id: 3, name: '微芒不朽' }];console.log("参数为:", arr);console.log("结果为:", groupBy(arr17,"name"));// 16. 数组去除假值/空值const compact = (arr) => arr.reduce((acc, curr) => curr ? [...acc, curr] : acc, []);let arr18 = [0, 1, false, 2, '', 3]console.log("参数为:", arr18);console.log("结果为:", compact(arr18,"name"));// 去除指定元素const removeItem = (arr, item) => arr.reduce((acc, curr) => curr === item ? acc : [...acc, curr], []);let arr19 = [1, 2, 3, 4, 2, 5]console.log("参数为:", arr19);console.log("结果为:", removeItem(arr19,2));// 修饰函数const mapArray = (arr, fn) => arr.reduce((acc, curr) => [...acc, fn(curr)], []);let arr20 = [1, 2, 3, 4, 2, 5]console.log("参数为:", arr20,(x)=>x+2);console.log("结果为:", mapArray(arr20,(x)=>x+2));// 元素过滤const filterArray = (arr, fn) => arr.reduce((acc, curr) => fn(curr) ? [...acc, curr] : acc, []);let arr21 = [1, 2, 3, 4, 2, 5]console.log("参数为:", arr21,(x) => x % 2 === 0);console.log("结果为:", filterArray(arr21,(x) => x % 2 === 0));</script>
</body>
</html>


http://www.ppmy.cn/ops/99013.html

相关文章

VIT论文阅读: A Image is Worth 16x16 Words

简介 在2024年&#xff0c;大家都知道了transformer的故事&#xff0c;但是在4年前, CNN和Transformer谁才是CV的未来&#xff0c;还没有那么确定。 在简介部分&#xff0c;作者提到了一个令人失望的事实&#xff0c;在基于imagenet的实验中发现&#xff0c;transformer的表现…

【K8s】专题十二(2):Kubernetes 存储之 PersistentVolume

本文内容均来自个人笔记并重新梳理&#xff0c;如有错误欢迎指正&#xff01; 如果对您有帮助&#xff0c;烦请点赞、关注、转发、订阅专栏&#xff01; 专栏订阅入口 Linux 专栏 | Docker 专栏 | Kubernetes 专栏 往期精彩文章 【Docker】&#xff08;全网首发&#xff09;Kyl…

@PathVariable:Spring MVC中的路径变量解析

在Spring MVC中&#xff0c;PathVariable注解是一个非常重要的特性&#xff0c;它允许开发者将URL中的一部分作为参数传递给控制器&#xff08;Controller&#xff09;的方法。这种机制在处理RESTful风格的API时尤为有用&#xff0c;因为它使得URL更加简洁且富有表达力。本文将…

心得与体会

Loop本地回环 Loop本地回环&#xff0c;通常指的是以127开头的IP地址段&#xff08;127.0.0.1 – 127.255.255.254&#xff09;&#xff0c;其中127.0.0.1是最常用的一个地址&#xff0c;被称为本地回环地址&#xff08;Loop back address&#xff09;。这个地址不属于任何一个…

工厂模式与策略模式:理解与应用

工厂模式与策略模式&#xff1a;理解与应用 1. 引言2. 工厂模式简介2.1 定义2.2 特点2.3 应用场景2.4 工厂模式例子&#xff1a;咖啡制作 3. 策略模式简介3.1 定义3.2 特点3.3 应用场景3.4 策略模式例子&#xff1a;咖啡定价 4. 区别4.1 目的不同4.2 应用场景不同4.3 解决问题不…

开源模型应用落地-qwen2-7b-instruct-LoRA微调模型合并-Axolotl-单机单卡-V100(十)

一、前言 本篇文章将使用Axolotl去合并微调后的模型权重,通过阅读本文,您将能够更好地掌握这些关键技术,理解其中的关键技术要点,并应用于自己的项目中。 二、术语介绍 2.1. LoRA微调 LoRA (Low-Rank Adaptation) 用于微调大型语言模型 (LLM)。 是一种有效的自适应策略,…

easyexcel--导入导出实现自定义格式转换

自定义格式 我们在数据库设计的时候经常会有枚举类型&#xff0c;如0表示普通用户&#xff0c;1表示VIP用户等&#xff0c;这在excel导入的时候&#xff0c;我们会填普通用户而不是0&#xff0c;这样就需要用到自定义格式把普通用户转换成0&#xff0c;我写了一个通用的抽象类…

代码生成:自动化开发

在现代集成开发环境中&#xff0c;智能代码补全和代码生成功能是两个至关重要的组成部分。 智能代码补全利用当前上下文和代码库信息&#xff0c;向程序员推荐合适的代码选项&#xff0c;而代码生成则根据指定输入创建遵循语法和语义规范的代码片段。 许多先进的IDE如Visual St…